Witaj, Masz 2 opcje ;) np. masz cos takiego: dim a as byte a.0 = 1 a.1 = 1 a.2 = 1 set a.0 set a.1 set a.2 a.3=0 a.4=0 a.5=0 reset a.3 reset a.4 reset a.5 Instrukcja: a.[numer bitu] = [0 lub 1] set/reset a.[numer bitu] gdzie set ustawia 1 reset ustawia 0 analogicznie dla zmiennych typu word integer - tylko że tam możesz zmieniać więcej bitów;) Pozdrawiam
Jaki będziesz miał wyświetlacz? Alfanumeryczny że string będzie ok? Czy może LED lub LCD segmentowy? Żeby zmieniać wartość enkoderem trzeba go obsłużyć... Enkoder ma przycisk? Zatem weź zmienną Word w której będziesz zmieniał nastawy np. [syntax=vbnet]dim wartosc as word dim index_wartosc as byte if index_wartosc =1 then wartosc=wartosc + 1 end if if...
Tak, rozwiązałem problem za pomocą tablicy.
Co zrealizować? Programowe zliczanie impulsów? Ustawiasz timer tak, żeby generował przerwanie co 100 us, sprawdzasz stan portu, robisz xor z poprzednim stanem i testujesz, które bity są ustawione - ustawiony, znaczy zaszła zmiana stanu, czyli inkrementujesz odpowiednią zmienną.
W Bascomie którego uzywam czyli Bascom AVR IDE, edytor sam zmienia nazwy zmiennych na wielkie litery, np z->Z. W przypadku wołania funkcji (w moim przykładzie T=x,y) z niezrozumiałych przeze mnie względów zmienia pierwszy argument na małą literę a drugi na wielką, niezależnie jak je użytkownik wpisze. Nie wiem czy to ma jakieś znaczenie, ale może właśnie...
Taka niestety jest konstrukcja Bascom'a. Jeśli nie chcesz robić tego krok po kroku to możesz sobie stworzyć funkcję, która to będzie robić. Innej alternatywy nie ma... no chyba że zmiana języka na C.
Dziękuję za podpowiedź, ale niestety zmiana typu zmiennych nic nie dała. Dalej przebieg jest taki jak przed zmianą.
Wszstko dlatego, iż zmienne typu Single są nieco odmiennie zapamiętywane w pamięci i mają wyjątki (np. NaN, QNaN, SNaN) które nie są liczbami, i każda operacja arytmetyczna z nimi powinna wywołać błąd operacji i jego zgłoszenie - a tego Bascom niestety nie obsługuje (jak i spora ilość innych kompilatorów). Operacja z jawną zamianą znaku jest bezpieczniejsza...
Daj kod, bo my nie wróżki...
' Funkcja musi być zadeklarowana przed jej pierwszym użyciem ' ponieważ kompilator musi wiedzieć jaki jest rozmiar danych ' przesyłanych do funkcji i jaki jest jej typ wyniku ' Funkcja musi mieć zdefiniowany typ wyniku, tu Integer Declare Function Test(byval Liczba As Integer , Tekst As String) As Integer ' określenie byval przed nazwą oznacza,...
Witam. Problem z histerezą polega na tym że histerezę ustalasz w liniach wykonywanych tylko raz po starcie procka, dlatego ona zawsze będzie wynosić 0+5 (zmienna przechowująca temperaturę zmierzoną po starcie programu będzie 0). zmienną histerezy musisz umieścić w pętli aby byłą aktualizowana cały czas wraz ze zmianą temperatury. Pozdrawiam
Chyba się źle zrozumieliśmy teraz mam tak, że nie mogę ustawić innej wartości jak 1 i 2 a powinno się zmieniać od 0 do 255 bo taki jest zakres zmiennej bitowej.
Witam. Napotkałem drobny problemik. Po wpisaniu id czujnika: Sid = &H28C2F8A602000098 BASCOM wywala błąd 49. zmiana deklaracji zmiennej Sid nic nie daje. Cały czas pisze że nie mieści się w zmiennej, BYTE, WORD, LONG... Co z tym zrobić?
Z tą dowlnością w używaniu rejestrów byłbym bardzo ostrożny. Nieodpowiednia zmiana - program się wysypie. Nie wolno używać w trybie zapisu bez wcześniejszego zapamiętania: Y ( soft stack pointer ), R4:R5 ( frame stack pointer ), R6 ( status register ), R8:R9 ( data pointer ), R23 ( translate register ), R12:R13:R14:R15 ( fp calculator ). W sumie można...
Witam Państwa Czy ktoś z Państawa może mi wyjaśnić dlaczego kompilator BASCOM 51 wersja demo (ograniczenia do 2kB) działa źle? Programuję nim AT89S8252 Walczę z tematem już troche czasu i zauważyłem że kod który piszę na ekranie jest błędnie kompilowany. Dopisanie jednej lini programu powoduje zmianę wartości zmiennej mimo że ta linia jej nie dotyczyła...
Wyprowadzenie FS(pin 19) steruje wielkością sprzętowej czcionki w trybie TEXT FS = "H" font 6X8 FS = "L" font 8X8 inne fonty trzeba zrobić programowo jako bitmapy
Problem rozwiązałem dużo wcześniej ... a teraz znalazłem czas żeby wyjaśnić. Oczywiście problem tkwił w programie. W etykiecie "posow" w pętli za każdym razem wyświetlam zmienne "I" oraz "X" - zmiana stanu portu B.0 ograniczona była czasem wyświetlania zmiennych na LCD.
A gdzie się to robi - i o ile zwiększyć? Piszę na Atmega8. Dodano po 3 Pomogła zmiana z local na dim. Dzięki.
Powtarzam ! konfiguracja przerwań jest ok. Jeśli wstawię w przerwanie cokolwiek innego to wszystko jest ok. Pozatym przerwanie działa prawidłowo i nie w nim problem a problem jest z kodem który podałem wcześniej i powtarzam któryś raz odznaczenie linijki timer1=0 załatwia sprawę i do zmiennej x wpisywana jest prawidłowa wartość wynikająca z pracy timera1...
aby wszystko było jasne , układ zasilasz napięciem stałym z pewnością na początek zastosujesz prostą sekwencję sterowania : 1000 0100 0010 0001 pomiędzy zmianą każdej sekwencją występuje przerwa czasowa tak wiec silnik zasilasz przebiegiem zmiennym w czasie dlatego była mowa o napięciu zmiennym w układzie i odpowiednich wzorach na obliczenie prądu
Witam. Tak na pierwszy rzut oka to masz błąd w programie bo w obu warunkach "case" sprawdzasz tę sama zmienną "W" a przed drugim case wpisujesz wartość z ADC do zmiennej "W1". W1 = Getadc(2) Wydaje mi się że zmiana nazwy zmiennej w drugim case na "W1" pomoże.
Ok, no powiedzmy, że dociera. Jedno pytanie jeszcze: Masz użyte zmienne Wlacz_zima i Wylacz zima, które trzeba zadeklarować osobno, a czy nie lepiej zadeklarować je w podprogramie, bo zdaje się, że nie są potrzebne poza tym podprogramem? A "zwracana-odliczana" jest wartość zmiennej Zima_lato na podstawie której dodajemy lub odejmujemy godziny np z GPS...
Po co jest "Readeeprom Nr_menu , 1" po "Debounce S1 , 0 , Zmiana , Sub"? To raczej nic nie wnosi do działania programu, ponieważ po "Debounce..." w zmiennej nr_menu już masz aktualny numer menu. "Readeeprom Nr_menu , 1" powinno być przed "Do". Wtedy aktualną pozycję menu odczytujesz tylko raz przy włączeniu zasilania i na ekranie wyświetlasz menu które...
Może sam spróbuj ;-) Tak w zarysie : w pętli głównej musisz dodać warunek: jeśli przycisk wciśnięty to zwiększ zmienną "czas" o 1 jeśli puszczony to zmienna "czas" =0 następnie: jeśli zmienna "czas" = 123 (dla przykładu, bo nie wiem jak szybko ta pętla przebiega) to : zmień tryb pracy (to masz strasznie napisane, więc trudno ogarnąć)...
Witam mam problem ze zmianą rozdzielczości wyświetlania zmiennej w bascomie pod procesor dokładnie atmega16. Mam zmienną typu single i chciał bym ją na wyświetlaczu lcd wyświetlać z rozdzielczością 0,5 czyli po kolei ....-1 -0,5 0 0,5 1 1,5 2 2,5 ...itd. Z rozdzielczością 0,1 nie ma problemu bo wystarczy zamaskować niepotrzebne dane i gotowe ale jak...
Hehe, przeanalizuj dokładnie Twój ostatni programik i odpowiedz sobie jeszcze raz na pytanie jak on właściwie działa :) ...jak ograniczyć ruch diody dosłownie na 4 pinach. Tu mamy przesuwanie 2 diodek - "00010001"... Wkradł mi się mały błędzik :) W swoim programie pobierałem dane z linii Data i były to tylko bity 0...3 dla silnika bipolarnego natomiast...
Jeśli umiesz obsługiwać peryferia to nie widzę problemu. Porównujesz jakąś zmienną z obecną temperaturą i sterujesz dowolnym pinem. Zmienną może dowolnie ustawiać za pomocą przycisków + -. Pozdrawiam.
Nie wiem jak to w bascomie nie wnikałem w kod, ale można to zrobić tak że deklarujesz aktywację przerwania jednym zboczem, a po jego wywołaniu zmieniasz tą konfigurację na drugie zbocze (zmiana w rejestrze MCUCR). Albo wywołanie przerwania ustawiasz na dowolną zmianę sygnału i w jakiejś zmiennej przechowujesz stan wcześniejszy i porównujesz
Chcąc bezproblemowo zmieniać kanały powinieneś zostawić GETADC() i w konfiguracji zmienić na SINGLE . W trybie FREE przetwornik mierzy ciągle (ustawiając flagi przerwania ADI F po każdym pomiarze), a ostatni wynik będzie znajdował się w zmiennej specjalnej ADCD (typu Word ). Jednak zmiana kanału pomiaru jest nieco problematyczna, bo kanały musiałbyś...
Tak co jeden cykl. Prescale jest 64 wiec nie tu chyba problem. Nic sie nie dzieje na wyswietlaczu a w symulatorze tez nie pokazuje zmian zmiennych.
Wielkie dzięki Panowie za odpowiedź. Mam programator USBASP. Już wczoraj doszedłem że to jest fusebit P Trzeba ustawić (0: osc.options proggrammed) Ale co ciekawe procesor chodził już bez przestawienia tej opcji. A Bascom wybrałem gdyż jest dla mnie najbardziej zrozumiały. Programuje sterowniki PLC a tam to wszystko w drabince jest proste jak drut.;)...
(...) chPin) == HIGH); // Czekaj na zwolnienie przycisku ledState = !ledState; // Zmiana stanu LED } } } if (ledState) { // Jeśli LED ma być włączony pulseLED(); // Pulsowanie LED } else { digitalWrite(ledPin, LOW); // Wyłączenie LED } lastSwitchState = reading; } Analizując Twój kod, wydaje się, że problem może wynikać z logiki, którą próbujesz zaimplementować,...
Fusing pominięty, typ zmiennej też zmieniony i nic, R1=47k, zmiana adc już była na 6, potem 7 i nic. A fuse bitami przecież chyba nie można wyłączyć ADC?
Bez zmian.
Wszystko jest w datasheecie na prawde :) Jesli wybierzesz odpowiedni tryb (o zmiennym czasie impulsu) to albo przez zmiane OCR1A albo ICR1A (pisze z pamieci).
Dziękuję za info. w końcu to jakoś zrozumiałem (mniej więcej...) Jako, że stawiam pierwsze kroki czy mógłbym prosić o przykład jak to wygląda... Jak się deklaruje zmienną itd... bo jakoś czytam o tym i nie potrafię złożyć tego logicznie. Pozdrawiam
[syntax=basic4gl]Config Timer0 = Timer , Prescale = 1024 Enable Timer0 : On Timer0 Przerwanie0 Dim Tmp As Word Tmp = 0 Dim Ptimer1 As Word Ptimer1 = 0 Do If Klawisz = 0 Then If Ptimer1 = 0 Then Ptimer1 = 100 End If If Ptimer1 < 95 And Klawisz = 0 Then Tmp = 1 End If End If If Tmp = 1 And Ptimer1 < 85 And Ptimer1 > 70 Then If Klawisz = 1 Then...
czyli zmieniając wartość idx jak napisałeś np. na 5 zmienia się również adres zapisu freq w pamięci eeprom i nie nastąpi nadpisanie jej w eepromie ? A w tym miejscu już mnie zgubiłeś; nie bardzo rozumiem pytanie... Wybór (nie zmiana) wartości idx np. na 5 wskazuje jedynie na konkretną wartośc zmiennej przypisanej temu wskaźnikowi podobnie jak address...
Nie tędy droga, Ty musisz zrobić coś dokładnie odwrotnego - nie wygenerować sygnał, ale go zmierzyć. Rozwiązania są 2, ale jeśli programujesz w bascomie i nie masz ochoty na operacje na rejestrach w procesora to kurczą się do jednego. Mianowicie: 0. ustawiasz timer na zliczanie impulsów i zmianę wartości jakiejś zmiennej - parametry dobierz w zależności...
Witam, Mam problem i nie wiem jak go rozwiązać. Chcę konfigurować moduł Wiznetu (chodzi tu głównie o zmianę adresu IP) aby mógł pracować z różnymi adresami. Używam instrukcji Settcp 00.08.220.03.07.24 , 10.0.0.19 , 255.0.0.0 , 10.0.0.0 i chce w miejsce numeru IP podstawić jakąś zmienną (Settcp 00.08.220.03.07.24 , IP_STAT , 255.0.0.0 , 10.0.0.0). Chce...
Witam serdecznie! Mój problem przedstawia się następująco: Mam zmienną która wyświetlana jest na wyświetlaczu jako "TAK" lub "NIE" standardowo ustawiona jest wartość (string) "NIE". Chcę aby zmiana tego wyświetlania nastąpiła po naciśnięciu przycisku (chwilowym) na przeciwną i już nie wracała do niej aż do następnego naciśnięcia. O ile dobrze pamiętam...
No to tak. U mnie pamięć grafiki w LCD zaczynała się od 768. Stąd taka stała w programie. Wcześniej (od 0) była pamięć textu. Pixele są rysowane poziomo. Czyli każdy bajt reprezentuje 8 pixeli jako pozioma linia. I teraz dość nieprzyjemna rzecz. Mianowicie tryb wyświetlania zależy od trybu textu. Jak wybierzesz tryb 8-mio bitwy to każdy bajt będzie...
Witam Potrzebuję zbudować generator sygnału PWM o zmiennej częstotliwości i zmiennym współczynniku wypełnienia. Wykorzystując sprzętowy PWM zmiana wypełnienia to nie problem ale czy można uzyskać na sprzętowym PWM zmienne częstotliwość od 50 do 1000 Hz płynną lub skokową. Jeżeli jest to możliwe do zrealizowania to prosiłbym o jakieś wskazówki jak się...
Dluzej, czyli ile czasu? Czemu "tracisz czas" na przepisanie Pom3 do Prc ? Nie mozna do Prc od razu wpisac wyniku Pom1 \ Y ? Jakies ograniczenie Bascom'a? Z - szybciej sie policzy jak bedzie: Pom2 = Cykl * X Z = Pom2 \ Y Ciekaw jestem ile to zajmuje czasu po zmianach.
Witam. Stworzyłem na mikrokontrolerze ATMEGA8 zegar RTC. Do procesora został podpięty kwarc zegarkowy - timer2 pracuje w trybie asynchronicznym. Program powstał z wykorzystaniem instrukcji BASCOMOWEJ Config Clock = soft: Kod: "Jeśli w programie użyto instrukcji CONFIG CLOCK, kompilator automatycznie generuje specjalne zmienne nazwane: _sec , _min ,...
Witam To nie jest skomplikowana sprawa. Deklarujesz zmienne kontrolne które beda zmieniału swoją wartość po wykryciu 0 na pinie. dim kontrolka1 as byte dim kontrolka2 as byte kontolka1 = 0 ' najpierw je zeruje kontrolka2 = 0 ' / Teraz musisz dodać jakies warunki które bedą powodować zmiane ich wartości If pind.0 = 0 then kontrolka1 = 1 then wywołaj...
Program juz skompilowalem i zaprogramowalem mikrokontroler. Na LCD pojawia się FRQ= (wartosc 0-255) [Hz] wyświetlana wartość zmienia się wraz ze zmianą mierzonej częstotliwości lecz zamiast wartości 0-1000 wyświetla tylko do 255 i przy dalszym zwiększeniu częstotliwości znów wyseietla 0-255.
A. No dobra. No więc skoro jest CTC to chyba masz to o co CI chodziło. Przy każdym doliczeniu Timera do wartości OCR2 następuje zmiana wartości pinu OC2. Przy ustawieniu tego na CLEAR albo SET nic dziwnego że nic nie generuje, bo jak raz ustawi to juz nic nie skasuje. Albo jak raz skasuje to już nic nie ustawi. Więc zostaw Toggle. I zmieniając wartość...
Właśnie i tego się bałem ze jak wcisnę przycisk i go trzymam to przełanczaja sie kolejne programy Tak to wlasnie jest gdy increamentacja lub decr. zmiennej jest umieszczona w petli 'do...loop' i jest warunkowana poziomem na okreslonym wejsciu. Za kazdym "obrotem' petli zawarte w niej polecenia sa bezblednie wykonywane, przedzielone ustawionymi czasemi...
Kolego coś takiego wymyśliłem :[syntax=vbnet] $regfile = "m16adef.dat" $crystal = 80000000 $hwstack = 40 $swstack = 16 $framesize = 32 Config Porta = Input 'port A jako wejścia Config Portb = Output 'port B jako wyjścia ' Config Portd = Input 'Port D Jako Wejścia Config Portc = Output 'port C jako wyjścia Config Sda = Portc.1 'konfiguracja pinu magistrali...
... A więc, wynikało by z tego, że jeśli w pętli przemiatamy po kolei kanały ADC 0...7 to każdy pomiar zabierze minimum 25 cykli dla każdego kanału. Nie wspominając o tym, że w rzeczywistości bascomowa instrukcja GETADC() (pomiar i przypisanie wartości do zmiennej) może zabrać więcej niż 25 cykli. Nie do końca, mylisz illość taktów przetwornika ADC...
Generalnie, W Bascomie obsługa RC5 pozostawia wiele do życzenia dlatego też Mark w najnowszej wersji ma wprowadzić obsługę RC5 na przerwaniu ICP ("prawdziwie" w tle) według poniższego kodu, który udostępniam i polecam: [syntax=basic4gl] $regfile = "m8def.dat" $crystal = 8000000 Config Timer1 = Timer , Capture Edge = Falling , Prescale = 8 '1 tick= 1...
Tzn. w tej dyskusji Kolega WOBI i Kolega r06ert coś o tym wspominają. Kolega r06ert napisał coś takiego: Już nie pamiętam który rejestr i jaki bit :) ...w pętli głównej programu odczytywałem ten rejestr i wszystko. :) Mimo że procesor wykonywał wiele innych zadań, to żaden z pakietów się nie zagubił ;) I coś takiego byłoby rozwiązaniem mojego problemu...
Witam! Jako początkujący użytkownik BASCOM'a zmierzam się z pewnym problemem. Chce zmodyfikować sobie zmienną T2 za pomocą dwóch przycisków. Jedno przyciśnięcie, zmiana o jedną jednostkę do góry/dołu. Próbuje za pomocą takiego kodu: [syntax=basic4gl] Config Portc.0 = Input 'przycisk góra Config Portc.1 = Input 'przycisk dół PORTC.0 = 0 PORTC.1 = 0 Cls...
Obejdzie się bez przesuwania i masek. Jeżeli mamy zmienną Z to wartość bitu b tej zmiennej można zmieniać odczytywać, zapisywać wysyłać do portu lub co komu się podoba poprzez Z.b . To tak jak Portb.1 itp. Odczyt bitu pierwszego to np. Wynik = Z.1 (bit zerowy to Z.0) Zapis to Z.1=1 Warunek If Z.1 = 1 Then ... i tak dalej.... Jeśli dotyczy to zmiennej...
Jeżeli używałbyś Bascom'owego zegara (Config Clock = Soft/User) data i godzina byłyba prawidłowa. Możesz zrobić eksperyment :), zdefiniuj zegar (zostaną dodane zmienne wykorzystywane przez Avrdos'a _sec, _min, _hour, _day, _month i _year) i dodaj podprogram Getdatetime. W podprogramie należy przepisać datę z PCF do zmiennych wykorzystywanych przez Avrdos....
- pytałem czy z punktu widzenia optymalizacji kodu jest różnica w obciążeniu w stosunku do globalnej deklaracji, w sumie retorycznie chyba :) . Różnice są tylko od strony programisty w ochronie wartości poza blokiem i zwolnieniem nazwy do innych bloków. Coś pominąłem? W zasadzie nic ;) ... bo właśnie nie ma żadnych jakichś różnic z punktu widzenia...
Jak nie radzisz sobie na razie z tym timerem to przynajmniej nie nadużywaj bezpodstawnie Wait. To co Ci zaproponuję nie zwalnia Cię od ogarnięcia timerów! Ustal sobie jakie dopuszczasz maksymalne opóźnienie pętli i użyj go tylko raz np. 10ms. Za rozwiązanie, może nie do końca eleganckie, zaraz zbiorę burę od fachowców ale w wielu przypadkach to naprawdę...
A tak może być ? http://obrazki.elektroda.pl/9165536300_1... Kliki realizowane są przez krótkie naciśniecie wyłącznika i zliczane. 2 razy klik powoduje zwiększenie zmiennej B o 1. Jeśli B=2 czyli 2-i klik następuje zmiana wartości zmiennej L czyli zmiana trybu ( wartości PWM). Kliki badane są na wejściu PB3. Na wejściu PB2 mierzona jest...
Przeczytaj: http://avrhelp.mcselec.com/index.html Wykorzystaj opisaną tam zmienną (modyfikacja jej zawartości w przerwaniu) lub ustaw niski czas na starcie, a potem kontroluj czy Input zostało przerwane. Prawdopodobnie przy przerwaniu INPUT ustawiana jest dodatkowo zmienna ERR. Trzeba by zajrzeć w kod "tylnymi drzwiami". Dodano po 27 EDIT: Nie ma tak...
no więć dalej to samo, to znaczy doszedłem do tego jak wyświetlić coś na LCD ale wciąż mam problem z tym programem. Ma to być menu gdzie poruszam się kursorem i zmieniam zmienną na której się znajduję (tak zrozumiałem to na stronie gdzie autor udostępnił ten kod). Ja to rozwiązałem poprzez zastosowanie zmiennej głównej nazwanej np Ekran,w której przechowywana...
Witam .............. tak jak wyżej pisałem chce zapisać dwie zmienne single i dwie zmienne word prosze jak to zapisac poprawnie do eepromu ...na przykład zapis ceny: [syntax=basic4gl] '............. Dim Cena As Single Dim Cena_ee As Eram Single 'obszar pamieci EEprom zarezerwowany dla zmiennej 'cena Cena = 1.10 'wartosc ustalona w subrutynie 'zmiana...
Witam. Masz w złym miejscu Do i Loop oraz Lcd. Zobacz ze program powtórnie już nie wyświetla nic (zmiany liczb). No i skoro deklarujesz Sub`y to ich użyj czyli Sub Menu1 ........ End Sub, no i dawaj te deklaracje zawsze na początku programu, np. zaraz po zmiennych. Pozdrawiam
Ja to rozwiązałem poprzez zastosowanie zmiennej głównej nazwanej np Ekran,w której przechowywana jest wartość odpowiednia dla wyświetlania zawartości na lcd np programowanie zegara,wyświetlanie daty,zmiana jasności podświetlenia. Do If ekran=1 then ...instrukcje... end if if ekran=2 then ...instrukcje... end if if ekran=2 then ...instrukcje... end if...
Najprościej będzie zmodyfikować program tak: [syntax=vbnet] Rez = Getadc(5) 'przechwycenie wartości napięć na wejściach ADC Pot_max = Getadc(4) If Rez >= Pot_max Then Wait 1 'wykrywanie przeciążenia Rez = Getadc(5) 'przechwycenie wartości napięć na wejściach ADC Pot_max = Getadc(4) If Rez >= Pot_max Then Reset Portd.0 'wyłączenie silnika Reset Portd.1...
Czy jak w Bascomie Avr, zapisuję zmienną X do pamięci EEPROM, to muszę wyłączyć przerwania. ? Bo to wygląda tak , że kręci się pętla główna Do...Loop. Jeżeli w tej pętli zostanie wykryta zmiana stanu zmiennej, to jest nowa wartość wpisywana do pamięci. Dodatkowo działa Timer0 do obsługi wyświetlaczy, przerwanie co 4ms Jeżeli w czasie zapisu do pamięci,...
Witajcie, Sprawdzałem z trzema wersjami Bascoma (1.11.8.3, 1.11.9.3, 1.11.9.8 -wszystkie oryginalne) i sam nie mogę uwierzyć co się dzieje. Otóż w samym układzie jak i zgodnie z symulacją nie następuje zmiana stanów portu. Czy u Was jest tak samo??? I o co tu chodzi??? Oto kod: $regfile = "m32def.dat" ' specify the used micro $crystal = 8000000 ' used...
Kolego ja te wartości dobierałem właśnie eksperymentalnie, kierując się wynikami pracy symulatora i działania zbduowanego układu i są one dobrane do mojego indywidualnego przypadku. Przepis przepisem, to dobre ustawienia na początek, ale działanie programu w praktyce może wymagać zmian :)
chcę osiągnąć coś takiego: Declare Function Set_by_spi(co As String*10 , Wartosc*40 As String , Procesor As Byte) As Byte A co to za zmienna Wartosc*40 ? Poza tym zmiennych w parametrach się nie wymiaruje. Wszystko dlatego, że w przekazywaniu parametrów uczestniczą tylko wskaźniki do zmiennych. Nie użyłeś ByVal więc kompilator przekaże 16-bitowy...
Zastosowałem się do instrukcji i dalej nic mi nie wychodzi.Przepraszam ,że zawracam głowe ale ja dopiero się uczę i to moje pierwsze pisanie. Dodano po 7 Teraz wygląda to tak: $regfile = "2313def.dat" $crystal = 800000 Config Pind.0 = Output Config Pind.1 = Output Config Timer0 = Timer , Prescale = 256 On Timer0 Odmierz_1s Dim Licz_8ms As...
Witam, od 2 miesięcy nie mogę sobie poradzić z właściwym sterowaniem segmentów wyświetlacza 7 segmentowego. Aby usprawnić sobie nieco pracę napisałem prosty program który wysyła na port wyświetlacza liczby z przedziału 1 do 255 ( czyli pełen zakres bin) a dodatkowo na wyświetlaczy LCD wyświetlana jest obecnie wysłana liczba w postaci dziesiętnej oraz...
W podprogramie obsługi przerwania powinno się wstawiać tylko niezbędne instrukcje, tak aby nie blokować na dłuższy czas innych przerwań. Wyświetlanie lepiej przenieść do pętli głównej lub umieścić w podprogramie. Metoda wyświetlania bez CLS jest dobra, jednak nie trzeba "kasować"wyświetlacza spacjami. Należy nadpisać dany fragment. Spacje można wyświetlić...
OK to jeszcze dopytam tak, rozumiem że na początku przerwania zmieniam stan Edge_ na 0, liczy timer i config int0=rising ale co dalej załóżmy że nadejdzie zbocze narastające i co wtedy się dzieje? No tak, zabrakło jeszcze jednej linijki... sory... Powinno być: If Edge_ =0 Then Start Timer1 Config INT0=Rising Else Stop Timer1 Config INT0=Falling End...
Nigdy tego nie robiłem z rozrzutności, ale teraz chcę zoptymalizować troche swój program. Deklaruje zmienne będące flagami determinującymi różne warunki w jakiejśc tam nieskończonej pętli programu. Flagi są ustawiane przez procedury, funkcje lub przerwania. Dim flaga1 as Byte Dim flaga2 as Byte ... Dim flaga8 as Byte Zajmuje mi to 8 bajtów. Czy zmiana...
Dzielnik przez 8 i 9 możesz zrobić na którymś timerze sprzętowym wbudowanym w procesor. A realizacja dzielnika przez 8,5 musi być programowa: Próbkujesz sygnał wejściowy i każda zmiana stanu sygnału wejściowego powoduje inkrementacje zmiennej co daję dwie inkrementacje na okres sygnału (stan wysoki i stan niski liczone osobno). A dalej pozostaje wykrycie...
Tylko, że tak zapisany kod wygeneruje trochę więcej intstrukcji niż "ręcznie" zoptymalizowany z AND, OR, SHIFT. Oczywiście biorąc pod uwagę pewne uproszczenia. Na przykład. dim xx as byte dim yy as byte xx = pinb yy = pind xx = xx and &b00000110 shift xx, right, 1 yy = yy and &b11000000 shift yy, right, 4 xx = xx or yy na wyjściu w XX dostniesz:...
Witam Mam pytanie dotyczące obsługi encodera... ................. Przy zmianie kierunku pierwsza cyfra na wyświetlaczu zostaje "zamrożona" a zmianie podlega druga cyfra, znów w pętli. i tak dalej. Każda zmiana kierunku powoduje przeskok na kolejną pozycje wyświetlacza Jest to w zasadzie prosta operacja, lecz brakuje tu zasadniczego warunku –...
Mam sprawdzać stan bieżący czy ilość przepełnień? To już zależy od Ciebie i od tego jak szybko chcesz puścić timer (z jakim preskalerem). Ale przy takiej precyzji wystarczy liczyć przepełnienia w procedurze obsługi przerwania. Jak wskazano wcześniej najrozsądniej jest użyć 3 zmiennych inkrementując wartość każdej z nich po przepełnieniu. Wciśnięcie...
Witam serdecznie. Próbuje stworzyć generator PWM o zmiennym wypełnieniu i zmiennej częstotliwości. Generator ten chce stworzyć na ATmega32 12MHz w języku BASCOM. Zmian dokonywać będzie można przez dwa potencjometry. Mam już napisany program ale niestety sygnał na oscyloskopie wariuje. Co jakiś czas jest przebicie innych wartości. Walczyłem z tym dość...
Witam. Nie mam już pomysłu, może ktoś z was coś podsunie. Problem leży prawdopodobnie w złym zarządzaniu pamięcią. Program to miernik energii elektrycznej. Może zamiast kodu przedstawie schemat blokowy. Cały program znajduje się w pętli, nie używam zadnych gosubów i innych podprogramów. Jest tylko 1 przerwanie co sek i tylko zmiana 1 zmiennej. 1. Program...
A co jest w tym poprawnego? Dodano po 3 Może to że warunek nie będzie wykonywany przy każdym naciśnięciu przycisku? Wersja z Inc I If I > 4 Then I = 4 End If Faktycznie będzie robiła bezsensowne obliczenia, ale zauważ że każda przypadkowa zmiana zmiennej I (na przykład pod wpływem silnego impulsu elektromagnetycznego) zostanie od razu zauważona i...
Po co jest Waitms 200 przy nadawaniu? Nie masz odpowiedniej zwłoki przed zmianą wartości Nadawanie po wysłaniu ostatniego bajtu (Print nie czeka na zakończenie wysyłania). Zmienna do której odbierasz komendę jest też za krótka (brakuje miejsca na enter). Pewnie nadpisuje jakieś zmienne ale na tyle mało ważne że to jako tako jeszcze działa. Ale po 3...
Czyli rozumiem, że Odczytuje się z czujnika temperatura (załóżmy te 10.125C ) Czyli: 0000 0000 1010 0010 I do zmiennej Odczyt(1) leci 0000 0000 a do zmiennej Odczyt(2) leci 1010 0010 Mam rację? Dodano po 36 No to zmieniłem swój kod: Do ' 1wreset 'reset ' 1wwrite &HCC 'jedna kostka, więc wykorzystujemy rozkaz SKIP ROM ' 1wwrite &H44 'dokonaj konwersji...
Witam Ok, nie ma problemu, może nie dokładnie opisałem na początku Obsługo PWM działa bez problemu w kodzie, który podałem w pierwszym poście - zmiana przy pomocy zmiennej A ( dla W1 ) i B ( dla W2 ) dłuższe przytrzymanie np. 1 sek - rozjaśnianie ( jeśli poprzednio było ściemniane ) dłuższe przytrzymanie np. 1 sek - ściemnianie ( jeśli poprzednio było...
Timer1 = 48256 'przerwanie wywolywane co 100 ms 10razy na sekunde Skąd można wywnioskować , że przerwanie wywoływane jest 10x/sek skoro nie widać jak Timer1 został skonfigurowany. Zauważyłem też ze zmiana długości wysyłanego ciągu przez nadajnik z 8 na 25 bajtów nie spowalnia jak by się wydawało transmisji. Pewnie że nie spowalnia bo układ ziewa z...
Witam! Zrobiłem urządzonoko na uC Attin2313, które po naciśnięciu jednego przycisku zaświeca kolejno diody na porcie B; po pewnych bólach udało mi się. Teraz próbuje zrobić to samo lecz z wykorzystaniem przerwań... i mam małe kłopoty, a mianowicie napisałem sobie programik w Bascom'ie: $regfile = "ATtiny2313.dat" $crystal = 4000000 $baud =...
próbuję sie nauczyć komunikacji AtMegi16 z kompem. używam bascomu i nie wiem jak mogę sprawdzić sygnal który dochodzi do wejścia komputera. Na mierniku pojawia sie zmiana impulsu ale chciałbym zobaczyc wynik tego na monitorze, zobaczyć program pokazujący co się przesyła??. Czy jest sposób żeby przesyłać zmienne z mikrokontrolera i zapisywać je do pliku...
Witajcie Jestem na etapie programowania układu zasilacza laboratoryjnego z ograniczeniem prądowym. mikrokontroler atmega16 Mój algorytm jest taki: Przerwanie co 8ms (ze względu na to że stosuje bascom i liczby zmiennoprzecinkowe nie mogę zejść niżej) W przerwaniu: - sczytane wartości napięć i prądów i porównanie ich z wartościami zadanymi -jeśli prąd...
Dałeś radę - prawie dobrze i nawet powinien działać... chociaż nie do końca jak byśmy tego chcieli ;) Parę moich poprawek: $crystal = 1000000 Config Pind.0 = Input Config Pinb.1 = Output Config Pinb.2 = Output Portd.0 = 1 Portb.1 = 0 Portb.2 = 0 Dim Dioda As Byte Dim Licznik1 As Byte Licznik1=0 Dioda = 0 '------------ Do Waitms 10 If Dioda > 0 Then...
Ja nie chcę zapisywać w eeprom nadlatujących SMSów tylko fragmenty ramki PDU. które będę wysyłał. A chcę je tam zapisać by mieć możliwość szybkiej zmiany, kiedy sobie napiszę program do zmiany zawartości eeprom. Staram się napisać program tak elastycznie, by zmiana danych w eeprom, była przez program w uC "do przełknięcia, Czyli jeśli nawet zmienię...
Żeby zmieniać czas odstępów między zmianiami najprościej chyba byłoby zrobić coś takiego: Przerwanie: ' co 16 us Incr Licznik x=0 do waitus 10 incr X loop until X>Y If Licznik > 100 Then Licznik = 0 Set R Set G Set B End If If Licznik > Red_color Then : Reset R : Else : Set R : End If If Licznik > Green_color Then :...
Witam Piotrva będę polemizował, cytat z manuala do Bascoma: Składnia: $CRYSTAL = wartość gdzie: wartość Liczba określająca częstotliwość (w Hz!) kwarcu lub oscylatora taktującego procesor. Wartość nie może być zmienną, lub liczbą obliczaną podczas kompilacji Kwarc mamy 8MHz a nie 4MHz i nie możemy kompilatora wprowadzać w błąd że ma kwarc 4MHz skoro...
A może wyłumaczyć mi ktoś tak jaśniej niż whelpie bascoma ;) co to jest ten prescaler i co on dzieli. Może tak po kolei jak twój program widnieje: 1. Jeżeli PORTB jest przeznaczony do obsługi LCD to nie konfiguruj go w ogóle w stylu jaki podałeś w pierwszym poście. Config Portb = &B11111111 : Portb = &B11111111 ===> źle!!! Może to powodowac zakłócenia...
Na wstępie chciałbym powiedzieć że piszę w BASCOM-ie AVR. Buduję urządzenie które ma wyświetlać wynik na wyświetlaczu 7-mio segmentowym (podyktowane warunkami środowiskowymi i widocznością). Napisałem program który działa (listing poniżej) ale dręczy mnie pytanie czy nie da się tego zrobić prościej tzn pobierać poszczególne cyfry bezpośrednio ze zmiennej...
Może nie umie wstawiać? $regfile = "m88def.dat" $crystal = 1000000 Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.5 , Rs = Portb.4 Config Portd = &B00001111 'portd 0 1 2 3 jako wyjscia portd 4 jako 1wire 5 6 7 jako wejscia Portd.5 = 1 Portd.6 = 1 Portd.7 = 1 Portd.3 =...
Trochę dziwnie te pętle zrobiłeś... a nie wystarczyło zrobić For...Next od 0 do 255 i odwrotnie po czym przypisywać wartość bezpośrednio zmiennej Pwm1a.
Pomimo ustawienia stosów prosto z programu - wcześniej ustawiłem nawet większe, bazując na ilości procedur i zmiennych lokalnych - niestety błąd dalej się powtarza. Tak jakby w którejś z bibliotek lub w zasobach kompilatora nie było wymaganej procedury _LCD_CONTROL . Próby zmian trybu graficznego w poleceniu Config Graphlcd , jak też zmiana biblioteki...
Witam. Jestem początkujący w programowaniu mikrokontrolerów i mam prośbę do osób z większym doświadczeniem o wyjaśnienie zasady działania poniższego kodu. ‘Program obslugi jednego przycisku S1 za pomoca instrukcji Debounce ‘Krotkie przycisniecie S1 umozliwia właczenie i wyłaczenie diody LED1 ‘natomiast przycisniecie przycisku S1 na...
Witam Mam płytkę Loggera GPS + SD + PCF8563. Jeśli chodzi o GPS i zapis na SD wszytko jest OK. Problemem jest ( i to pierwszy raz się z czymś takim stykam ) odczyt danych z z układu PCF8563. Otóż dla pewnych wartości sekund, odczytana wartość czasu - godziny jest większa o 40 ( czterdzieści ). Czyli jeśli czas jest 22:40:02 to jest wyświetlany poprawnie,...
Witam, mam problem z napisaniem fragmentu kodu Może zacznę od sprzętu jakim dysponuję: - uC ATTiny2313 - wyśw. LCD 2x16 znaków Najpierw pasek: ma on "zmieniać" położenie w zależności od pewnej zmiennej, pasek wygląda tak: "----O-----------", czyli 16 pozycji, zmienna jest typu Byte, Jezeli masz zmienna "as word" czyli 16 bitowa i masz rowniez 16 pozycji...
zmiana zmiennej bascom ustawienie zmiennej bascom zerowanie zmiennej
schemat nissan primera laguna klapa bagażnika wymuszenie sinusoidalne
sharp lc46le824e falownik powmr
Wyświetlacz "I" na Beninca BULL8 - co oznacza? Wymiana matrycy w monitorze Gigabyte Q32QC