Jak poprawnie skonfigurujesz to zadziała. Oczywiście sam licznik to nie wszystko, trzeba jeszcze ustawić port jako wyjście.
Pewnie że nie będzie działać, ustawiłeś Preskaler =256 a więc przy zegarze 16MHz przerwanie od Timer0 będzie pojawiać się z częstotliwością 62500 razy na sekundę. (16000000/256 = 62500). Zalałeś modem zapytaniami o CSQ i biedny nie ma czasu na odpowiedź.
Należy: - zadeklarować zmienną globalną np. LICZNIK i nadać jej wartość zera, - włączyć przerwania od przepełnienia Timer0, - w funkcji przerwania należy zwiększać wartość zmiennej LICZNIK o jeden Aby poznać liczbę impulsów wystarczy pomnożyć LICZNIK*256 i dodać do niego aktualną wartość rejestru licznika timera, czyli jak sądzę counter0 (nie znam BASCOM).
Ok, jestem - nie miałem w ręku tego procesora więc musimy poczytać datasheet. Znajdź go i wklej tutaj link. Uwagi do schematu: 1. masy masz podłączone bo na schemacie nie :) 2. nie widzą filtrowania zasilania patrz tutaj: http://mikrokontrolery.blogspot.com/2011... 3. błędy filtrowania ADC akurat się przydadzą do liczb...
W tym kodzie jest błąd: Load Timer0 = 250 jest niepoprawnie zapisane bascom nie krzyczy błędem ale ta składnia nie działa. Powinno być Load Timer0, 250 Ta funkcja ładuje do timera wartość 256-wartość, czyli w twoim wypadku 6.
Coś mi się zdaje że przerwanie się nie wykonuje. W symulacji się wykonuje, ale co 65536 cykli. BASCOM coś pierdzieli. Może przejdz na Timer0 albo Timer2 , przynajmniej dla testu.
Nie no... po co myśleć. Po co czytać ds'a każdy timer0 jest 16bitowy...
Pojemność timer0 jest 256 kolega jej chce wpisać 625 -> load robi 256-value czyli w kolegi przypadku 256-625 bóg jeden wie co bascom tam wpisze;)
marcinek.p - to gotowiec dla ciebie, nie mam jak go przetestować ale jestem pewien że zadziała jak trzeba. Masz tu przerwanie, miganie led i zliczanie migniec z incr Mozna to wszystko wkleic do przerwania ale dobra zasada nakazuje w przerwaniach umieszczać jak najmniej kodu. [syntax=basic4gl] $regfile = "m8def.dat" $crystal = 1000000 $hwstack = 32 $swstack...
O kurcza. Nie wiedziałem że BASCOM umożliwia coś takiego. Ale jednak domyślne ustawienie jest na Timer0 i o tym mówi HELP. A czy servo drga też na BASCOMOowej obsłudze tego wszystkiego? nekmil : Też bym nie poznał że jesteś Czechem ;)
1. W jakim celu konfigurujesz liczniki, wpisujesz im wartości początkowe, a potem wywołujesz ich zatrzymanie przez STOP TIMER0/TIMER2 skoro nigdzie indziej ich ponownie nie uruchamiasz? 2. Jakim cudem kompilator nie protestuje gdy w pętli głównej umieszczasz samo ON TIMER0/TIMER2 nie podając trzeciego słowa kluczowego GOTO/GOSUB i ostatniego ich parametru?...
Witam mam prosty program. Timer zlicza naciśnięcia przycisku. Problem polega na tym że po jednokrotnym naciśnięciu wartość zwiększa się o jakąś ilość (nie zawsze o 1). Jak temu zaradzić? np. żeby zmiana stanu licznika była możliwa tylko co określony odcinek czasu. [syntax=basic4gl]Config Pinb.0 = Input Set Portb.0 Config Timer0 = Counter , Edge = Falling...
Modułu nie odczytuje się w kółko. Kiedy wykryje wyładowanie atmosferyczne to da znać na pinie INT. Z kalibracją sprawa wygląda tak że antena wraz z wbudowanym układem mają rezonowac na 500kHz. Żeby to dostroić w czipie jest kilkanaście kondensatorków które można podłączać programowo. Ustawia się moduł w taki tryb by na pinie INT wystawiał częstotliwość...
nie no to jasne ... jak coś komuś nie wychodzi to na bank wina Bascoma ... tylko ze jak ma liczyć impulsy to ma być skonfigurowany jako licznik COUNTER a nie jako czasomierz TIMER czyli nie CONFIG TIMER0 = TIMER , PRESCALE= 1 | 8 | 64 | 256 | 1024 tylko CONFIG TIMER0 = COUNTER , EDGE= RISING | FALLING
Po Config Timer0 wpisz dodatkowo TCCR0 = 4 Config Timer0 = Timer , Prescale = 256 Tccr0 = 4 Tylko musisz coś zrobić z START TIMER0 i STOP TIMER0 bo one przywrócą wartość po CONFIGu i program dalej nie będzie działał. Najprościej będzie usunąć te instrukcje. dodano 20 Sie 2008 08:05 Mail z opisem błędu poszedł już do MCS Electronics. Zbaczymy jaka będzie...
hmmm Przede wszystkim: Enable Interrupts On Timer0 Przerwanie Stop Watchdog Config Timer0 = Timer , Prescale = 1024 Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 256 'PWM=250Hz Load Timer0 = 195 To włączenie przerwania jest wstrętne w tym miejscu:P Co do wniosków... może spróbuj zwiększyć stos o...
Proszę bardzo: Config Timer0 = Timer , Prescale = 256 On Timer0 Odmierz_8ms Enable Interrupts Enable Timer0 Counter0 = 6 .... Odmierz_8ms: Counter0 = counter0 +6 .... instrukcje return
Więc zostają 2 możliwości, albo program coś mieszał w odliczaniu czasu(może przerywałem timer0 timerem1 ale to powinno powodować opóźnienia!)albo atmega zła :P Mniejsza, teraz zrobiłem go na pcfie, wystarczy program dopieścić :P
Niestety to nie jest wina prescalerów i taktowania, próbowałem już w każdej kombinacji . Żadnej różnicy nie zauważyłem, a napięcie przy wyjściu pwm się nie zmienia. Z tego co wiem ,to może być to wina złej kompilacji, dlatego przy wyjściu oc1a(Pin D5) od pwma muszę odwoływać się do poszczególnych rejestrów coś na wzór tego: [syntax=vbnet]Config Pinb.3...
Pisząc książkę pewnie jest więcej czasu na przemyślenie czy dany zwrot dotrze do kogoś kto dopiero próbuje zrozumieć temat. Pisząc post niektóre rzeczy wydaja mi się oczywiste bo wynikają z poprzedzających je wypowiedzi. Widać nie zawsze. 1000ms /((8MHz/256)/256)=8,192ms Lepiej? Programowanie to nie tylko wiedza nabyta, ale też umiejętność główkowania...
Witam. Nie mam tego na czym obecnie przetestować, ale może spróbuj w ten sposób : $crystal = 8000000 $regfile = "m8def.dat" Config Portd.7 = Output Config Timer0 = Timer , Prescale = 64 Dim Licznik As Integer On Timer0 Timer0_int Enable Interrupts Enable Timer0 Timer0 = 6 Licznik = 0 Do Loop Timer0_int: Counter0 = Counter0 + 6 Incr Licznik...
Nie wiem jak w nowych wersjach BASCOM'a, ale w starych nigdy nie użyłem Start timer0 i jakoś wszystko działało. Teraz przerzuciłem się na C, bo lepiej się panuje nad wszystkim. Przeczytaj dokładnie helpa od twojej wersji i co po czym powinno być. Ciężko powiedzieć co się może dziać z BASCOM'em w tej sytuacji, nie widzę błędów (ale dawno nie miałem styczności...
Może się pomyliłem, ale chyba przerywasz sobie odbiór co 2ms. Dlaczego nie użyjesz wyższego preskalera? Np. 1024? Możesz nawet po ustawieniu Flagi wyłączyc Timer i po odbiorze włączyć ;) Timery można dowolnie konfigurować podczas pracy programu. Druga sprawa ustaw sobie odbiór do bufora w tle (Config Serialin = Buffered, Size..)
No to kawa na ławę. Instrukcja Getrc5 w czasie działania używa jest licznika TIMER0 i związanego z nim przerwania. Licznik ten jest służy do generacji wymaganych opóźnień podczas próbkowania sygnału. TIMER0 może być dalej używany przez program, lecz należy się liczyć z wynikłymi opóźnieniami, gdy wykonywana będzie funkcja GETRC5(). Jest tylko jeden...
Zadeklarowałeś "Zmianna" a przypisujesz "Zmienna". :) Edit: Wyjście z procedury obsługi przerwania wykonuje się za pomocą Return a nie Goto Glowny ! Resztę błędów znajdziesz sam. :)
Taka składnia dotyczy tylko Timer1/Timer3/Timer4/Timer5. Nie zadziała poprawnie dla Timer0 i Timer2. Choć z moich osobistych obseracji to najnowszy BASCOM-AVR i spora grupa procesorów poprawnie obsłuży taką składnię: CONFIG TIMER0 = PWM , PRESCALE = 1 | 8 | 64 | 256 | 1024 , COMPARE A PWM = CLEAR UP | CLEAR DOWN | DISCONNECT , COMPARE B PWM = CLEAR...
Przerobiłem tak, żeby wysyłał testowo tylko jedną wartość ( losową ) co 8 sekund Dodano po 18 Dołożyłem Clear Serialin0 Com1_str = "" czyli [syntax=vbnet] $regfile = "m328pdef.dat" $crystal = 8000000 $hwstack = 100 ' rozmiar stosu sprzętowego $swstack = 100 ' rozmiar stosu programowego $framesize = 128 $baud = 19200 '************ Uart 0 Config Serialin0...
Jeszcze po odblokowaniu przerwań dopisz Start Timer0 .
f S1 = 0 Then Stop Timer0 Call L_stop Call P_stop Do Loop End If No i tu program zakończy swoje działanie po spełnieniu warunku S1=0. Nie wyjdzie z pętli Do...Loop do pętli głównej. Aha... i jeszcze Case deklaruje się z dwukropkiem Select Case Stan Case 1: Gosub Pucieczka Case 2: Gosub Tucieczka Case 0: If Namierzony_sharp1 = 1 Then Gosub...
Ja mam taki program zrealizowany na Atmedze8. [syntax=basic4gl]$regfile = "m8def.dat" $crystal = 8000000 $hwstack = 32 $swstack = 40 $framesize = 40 Config Portb.1 = Output 'wyjscie triak Triac Alias Portb.1 Config Rc5 = Pind.7 'rc5 pin timer0 Dim Level As Word 'poziom sciemniania 1 - 20 Dim Timer_val As Word 'wartosc timer1 dla sciemniania Dim Command...
Witam, Chciałbym przerobić nie swój kod programu pod żyroskop l3g4200d. Kod znalazłem w internecie jest napisany właśnie na atmegę 1284p, a ja potrzebuję go przerobić na atmegę8. Kod wygląda następująco: [syntax=basic4gl]'======================... ' Project: L3G4200D 3tripple axes gyro Test #1 '...
Przecież pisałem ci aby Getrc5 dać w przerwaniu, eeeh, no kolego - weź no użyj troszkę szukajki na elektrodzie chociażby. Int1_rc5: Disable Int1 Enable Interrupts If Ir_flag = 0 Then Getrc5(address , Command) Ir_flag = 1 End If Return a potem w pętli głównej: Do if Ir_flag = 1 then Ir_flag = 0 If Address < 255 then ..... tutaj dalej obrabiasz...
Tu masz program pod ATtiny2313, jeśli potrafisz programować, to też potrafisz przerobić program na ATMegę: [syntax=basic4gl]' Bardzo prosty zegar bez możliwości ustawiania Dim Sekjed As Byte , Sekdzies As Byte , Minjed As Byte , Mindzies As Byte Dim , Godzjed As Byte , Godzdzies As Byte , Mux As Byte , Migaj As Bit Config Portb = 255 : Portb = &B255...
To jest przyklad tego jak mozna obsluzyc DS1820 przez mega 8 ale jest tam tez obsluga wyswietlacza w C.Moze sie pryda.Sam to dostalem od jednego kolegi z forum:-) wiec mam nadzieje ze sie nie obrazi...mnie interesowal DS. Pozdrawiam Maciek! #include <avr/io.h> #include <avr/pgmspace.h> #include <stdlib.h> #include <ctype.h> #include...
Witam. W pewnym sofcie dla Atmega16 wykorzystałem już: - Timer1 (16 bit) do odliczania 0,0001s odcinków czasu - Timer2 (8 bit) jest wykorzystywany przez odbiornik podczerwieni (instrukcja getrc5) Timer 0 niby jest wolny, ale nie wiem / nie jestem pewien czy nie jest on wykorzystywany przez jakieś używane przeze mnie instrukcje (np. print dla sprzętowego...
] Gdybym chciał jednak mierzyć załóżmy do 1kHz to wymaga aby zliczać przepełnienia? Dlatego napisałem..."Nie znaczy to jednak..." w złym obliczeniu 1 sek wartość wynosiła 61630, przy prawidłowym obliczeniu wynosi 34 286 uwzględniając czas 1sek, częstotliwość taktowania 8MHz i prescaler 256. Przecież czas (1 sec.) odmierzasz timerem0, który jest 8-bitowy...
Co do szybkości - Flaga jest ustawiana co 3,21 sekundy [syntax=basic4gl] Czas: Timer0 = Timer0 + 112 ' ( 100 = 1 sekunda ) Incr Licznik_ds If Licznik_ds = 321 Then ' 3,21 sekundy Flaga_ds = 1 Licznik_ds = 0 End If Return [/syntax] czyli pierwsza flaga to wywołanie DS18B20, później znowu 3,21 sekundy i flaga, wtedy konwersja i obliczenia. Zastanawiam...
Możliwe że niektóre komendy wykorzystywane przy obsłudze karty SD zmieniają parametry konfiguracyjne RFM12b. Obsługa dla SPI w przykładzie który podałem wcześniej jest programowa. Więc jeśli masz wolne wyprowadzenia możesz przerzucić się na inne piny. Tzn. kartę SD zostawić na HARD SPI, a RFM puścić na SOFT SPI ? Zauważyłem też problem z timerem w...
Nic nie ustawiałem, więc pewnie są domyślne "Domyślnym (fabrycznym) ustawieniem mikrokontrolera ATMEGA 8 są bity CKSEL3..0 = "0001" oraz SUT = "10". Oznacza to że fabryczny mikrokontroler, przed zmianą jakichkolwiek "Fusow" pracuje na wewnętrznym oscylatorze RC z najdłuższym czasem startu i taktowaniem 1MHz."
Witam! Na podstawie informacji zawartych w książce "Programowanie mikrokontrolerów w języku Bascom" napisałem program: Problem: Problem polega na tym, że program nie działa poprawnie. Po pierwsze procesor zamiast 1 sekundy odmierza ok. 8s. Jest to dla mnie nie zrozumiałe, ponieważ kodu zawierającego instrukcje tyczące się timer0 nie zmieniałem. To samo...
Nie bardzo jest co komentować, bo najważniejszej procedury (ISR) nie pokazałeś. Jedno jest pewne: Taka konstrukcja i wywołanie procedury 800_ms zakończy się opóźnieniem programu głównego o parę mikrosekund i tyle. Zmienna Licz_8ms będzie się inkrementować tzw. "sobie a muzom". Co więcej, nawet jakbyś poprawnie skonstruował tą procedurę to dalej zamiana...
A proszę bardzo wersję: Compiler version: 2.0.2.1 Compiler build: 2.0.2.1.0 IDE version: 2.0.2.0 Windows OS: Windows 7 Proffesional SP1 Oryginał legalny nie ma się czego wstydzić. Timera używam tylko jednego z odmierzaniem około 5 sekund. 'konfigurujemy timer wywoływany co jakiś czas (patrz procedura) Config Timer0 = Counter , Prescale = 1024...
[syntax=basic4gl]$regfile = "m8def.dat" $crystal = 10000000 Config Timer0 = Timer , Prescale = 128 Load Timer0, 5 On Timer0 czas Enable Interrupts Enable Timer0 Do If Pinc.0 = 1 Then Start Timer0 end if If Pinc.0 = 0 Then reset portd.1 end if Loop czas: set portd.1 stop Timer0 return [/syntax] Tak na szybko,... nie testowany. Zrobić możesz wszystko,...
Nic nie trzeba informować kompilatora - Bascom ładnie przyjmuje wprost rozkazy asemblera ale w zasadzie atom1477 zrobił to nawet bez asemblera - sorki - po prostu "ręcznie" odwołał się do rejestrów i wpisał do nich odpowiednie wartości tzn poustawiał bity tak żeby coś tam działało w tym przypadku co ja ci podałem trza by to było mniej więcej zrobić...
Timer2 i Timer0 nie ma wyjść A i B zatem takie definicje nie występują zapewne. W Helpie nie napisali jak uruchomić PWM na Timerze2?
Witam, ja właśnie dokładnie taką samą konfigurację 2 procków czyli łączyłem Atmega8 oraz Atmega16 po tym właśnie i2cslave w Bascomie i mogę się coś niecoś na ten temat wypowiedzieć.... ... otóż biblioteka ta I2cslave dla softwarowego rozwiązania układu SLAVE w I2C rzeczywiście działa dobrze tak jak jest opisana ale... jest właśnie jedno i to dosyć spore...
Ty to jesteś krejzolka Aldoro wiesz hahahahaha Podłączył byś wyjście transoptora do wejścia INTx albo ustawił Timer jako Counter a wyzwalanie jako, na przykład Falling, Co sekundę sprawdzał byś ile impulsów nabiło przez sekundę. I to wszystko. Bez obsługi przepelnienia Timera osmiobitowego zmieścił byś 255 impulsów na sekunde. Miłego dnia. Mogłeś wcześniej...
W zasadę działania programu nie wnikałem ale błędy jakie znalazłem to: 1. Masz zadeklarowaną Funkcję Sharp_Odczyt natomiast w programie wywołujesz funkcje Sharp_Odczyt1 i Sharp_Odczyt2 które nie są zadeklarowane. Proponuję funkcję Sharp_Odczyt przerobić tak: Function Sharp_odczyt(byval Kanal As Byte) As Word Stop Timer0 Sharp_odczyt = Getadc(kanal)...
Witam W Atmega 644 mam: EQU not found, probably using functions that are not supported by the selected chip Według noty Timer0 i Timer2 są 8-bitowe, więc można je "zamieniać" i mają oddzielne preskalery.
Robisz prosty błąd w składni. Poczytaj w helpie o Load. Nie tak: [syntax=basic4gl]Load Timer1 = jakas_wartosc[/syntax] tylko tak: [syntax=basic4gl]Load Timer1 , jakas_wartosc[/syntax] Z tego co pamiętam można również tak. przykładowo: [syntax=basic4gl]Timer0 = 249[/syntax] co jest równoważne: [syntax=basic4gl]Load Timer0 , 6[/syntax] Ale to sobie musisz...
Jak zmusić diodę alarmu do migania nie używająć procedur waitms ? Mam teraz zrobine tak: Używasz Timer0 jako pewnego rodzaju 'swoisty' prescaler: (4 ms; 100 ms; i 1 sec). Dlaczego okazyjnie nie wykrzystać tych 100 ms na miganie diodą? Wstaw tą wyżej procedure (troche zmodyfikowana - zamiast "set Porta.5" daj "toggle") w przerwaniu timera0 w miejscu...
Nie,ma liczyć litry tak jak dystrybutor . Dodano po 2 Nie wiem w jaki sposób dodawac litry do zmiennej po przekroczeniu okreslonej liczby impulsów z przepływomierza to co znalazłem to liczone wszystkie w czasie a tu chyba chodzi o przepełnienie licznika Czas tu nie ma znaczenia! Użyj dowolny timer w charakterze licznika (Counter), i tak jak sugerowano...
Spróbuj skompilować ten programik pod konkretny mikrokontroler. W Bascomie domyślenie masz ustawione AT90S2313. Użyj dyrektywy: $regfile = "m8def.dat" - dla ATMega8, $regfile = "2313def.dat" - dla AT90S2313, Może pomoże :)
Wpisywanie $CRYSTAL bez rzeczywistej zmiany taktowania procesora będzie powodować, że wszelkie opóźnienia i obliczenia kompilatora dotyczące liczników nie będą zgodne ze stanem faktycznym. GETRC5() korzysta aktywnie z licznika TIMER0. Tak manewruje wartością wpisaną do rejestru licznika oraz preskalerem by otrzymać jednakowe odcinki czasu zliczane później...
Tak poza tematem, czy to sie nie pisze "Load Timer0, 100" ? i zrob timer0=cos na starcie i w przerwaniu.
Witam. Jestem początkujący jeżeli chodzi o mikrokontrolery. Chciałbym prosić kogoś bardziej doświadczonego o sprawdzenie poprawności mojego programu. Działanie: Sterowanie 3 silnikami BLDC i 1 serwo za pomocą PWM. uC otrzymuje przez UART literę oznaczającą funkcję, następnie ma ją zrealizować. Silniki podłączone będą przez regulatory modelarskie, a...
Niestety Bascom jest niedorobiony. Ilez to ja niekiedy spedzilem czasu bo cos mi nie chodzilo. Co wersja to inny blad. W jednej wersji nie chodzily mi np. timery na Atmega 16, prescaler blednie sie ustawial itp. Warto jest podgladnac rejestry i sprawdzic czy aby Bascom nie wpisal tam glupot. Jesli wpisal glupoty a to najczesciej jest przyczyna probowac...
Witam Używam Attiny2313 do pomiaru dwóch temperatur z DS18B20. Wynik ( Integer ) przesyłam bez żadnej obróbki przez UART przewodem 40 cm do Atmega328. Atmega rozbija odebrane dane i jest obróbka Kod Attiny2313 $regfile = "attiny2313.dat" $crystal = 8000000 $baud = 4800 '********************* Konfiguracja magistrali 1-Wire Config 1wire = Portd.5...
Czy taki programik napisany w bascomie wystarczy, by wysłać dane z ADC Atmegi8L bluetoohem podłączonym po Rx i Tx? Wydaje mi się, że powinno być ok skoro transmisja jest szeregowa. $regfile = "m8def.dat" $crystal = 3686400 $baud = 19200 Config Adc = Single , Prescaler = Auto , Reference = Avcc Config Timer0 = Timer , Prescale = 256 'co 69,44us Enable...
Witam Udało mi sie uzyskać w miarę płynną regulacje na podanym przezemnie wyżej schemacie PC817 zastoswałem gdyż był pod ręką a PC814 jeszcze nie dotarł Ale docelowo chciał bym zastosować ten drugi zmieniłem też program teraz procedura przerwania i timera wygląda następująco [syntax=vbnet] $regfile = "m32def.dat" $crystal = 16000000 $hwstack = 128 $swstack...
Witam,. Mam następujący problem: Przetwornik analogowy na ADC pin 1 Przetwornik częstotliwość na Timer0 max232 1uF Kwarc 8Mhz i atmega16L Na kablu ze złączkami BNC mam połączenie atmega -> przetwornik czestotliwosci (2 kolumna). Wydaje mi się, że wszystko dobrze zlutowane oraz nie ma przerw w kablu BNC. Kabel mam 50 Ohm. Podczas wysyłania danych na...
(...) Timer obsłużyć umiem i zgadzam się z twoją sugestią ale jak zrobić aby cały kod umieszczony w pętli odczytu wykonywał się po kolei a nie wszystko co 100us? Gdy umieszczę cały kod w przerwaniu nie osiągnę zamierzonego spowolnionego odczytu MCP w trakcie wykonywania innych rzeczy przez ATMegę... Rozumiem Twój problem. Aby uzyskać ciągłe i kontrolowane...
Ale która konkretnie, czy Enable interrupts, czy Enable Timer0, czy oba na raz? Moim zdaniem to kolejny bug bascoma, znów może jakieś pokręcone rejestry, itp. Dokładnie problemu zidentyfikować nie mogę, bo takich procesorków nie mam, ani czasu tez zabardzo na takie badania. Jedyne co mogę doradzić to: a) zrobienie własnoręcznie przejściówki m8515/m32...
Bardzo ciekawa alternatywa;-) Brawo. Jakbyś w przyszłości rozwijał kod to mógłbyś się pokusić o wspieranie dowolnej częstotliwości taktowania procesora. Wystarczy że przeliczę wartości dla timera i na poczatku programu umieszczę Const xxxx = xxx i każdy sobie podstawi okresloną wartość mirekk - tak, można mierzyć długości półbitów ale zauważ że wtedy...
Dzięki Marcin za odpowiedź. W sobotę kupiłem TowerPro SG-5010, bo tamte, faktycznie za delikatne były, jak mi sprzedawca w sklepie pokazał (prawdziwe mini) ;-) Uruchomiłem serwo bez problemów. Sterowanie sygnałem z regulatora PI zbudowanego na Atmega16. Jedynie problem mam tego typu, że przy korzystaniu z drugiego timera Timer1 (Timer0 wykorzystuje...
Witam! Jakiś rok temu zainteresowałem się elektroniką. Zrobiłem kilka układów. Obecnie interesuję się programowaniem mikrokontrolerów. Zakupiłem na allegro zestaw uruchomieniowy EvB 4.3 ( wystarzczy, że wpiszecie w wyszukiwarce i będziecie wiedzieli o co chodzi) - inaczej po prostu płytka uniwersalna. Z tym, że przeważnie do tego zestawu jest dołączany...
Depresja.... Dodano po 1 Tak się zastanawiam czemu tu jest to: 'The GETRC5 function uses TIMER0 and the TIMER0 interrupt. a w helpie że Timer=2
bezpośrednio z bascoma się nieda. trzeba by wpisać odpowiednią wartość do rejestru sterującego timerem ale niepamiętam dokładnie jak to sięrobi, trzeba by zajżec do noty katalogowej tam wszystko dokładnie opisane. ale mozna zrobić inna sztuczkę $regfile = "m8def.dat" Config Pinb.1 = Output $crystal = 1000000 Config Timer1 = Timer , Prescale...
Witam Mimo, że większość proponowanych tutaj rozwiązań podłączenia RFM12 do Atmegi wykorzystuje SPI programowe, ja podłączyłem tradycyjnie, przez SPI sprzętowe - mimo, że nie miałem problemów z wgrywaniem kodu do Atmegi spiętej z RFM12, to uruchomienie ich razem jest problematyczne ( każde osobno działa bez problemu ) [syntax=basic4gl] $include "Config_AVR-DOS.BAS"...
Witam, Posiadam czujnik odległości HC-SR04. Mam problem z obsługą tego czujnika na atmedze32. Napisałem bardzo prosty program który powinien moim zdaniem działać ale nie działa :) Siedzę na nim już 3h i nic... Wszystkie kabelki są dobrze podłączone (sprawdzone 5 razy), czujnik jest dobry bo sprawdziłem go programem z bascoma znalezionego na forum [url=http://www.elektroda.pl/rtvforum/to...
Witam wspólnotę chciałbym zaznaczyć że z wykształcenia jestem mechanikiem, a z programowaniem nie miałem wcześniej styczności. Przeczytałem książeczkę która mowiła o programowaniu w jezyku bascom, i stworzyłem taki o to kod programu. [syntax=basic4gl] $regfile = "m8def.dat" $crystal = 8000000 Config Timer0 = Timer , Prescale = 256 'licznik do odmierzania...
Witam Panowie (Panie?) Jetem początkującym elektronikiem a tym bardziej programistą uP. Kiedyś lubiłem, jeszcze na Commodore, bawić się w pisanie programików w Basicu, więc jako tako znam i lubię ten język. Więc dlatego zdecydowałem się na realizację projektu w tym języku... O ile z samym językiem nie ma problemu, gdyż coś tam ze składni i zasad pisania...
Mam mały problem chcę zrobić prosty miernik częstotliwości w bascomie do ok. 600KHz Warunek ma mierzyć z dokładnością 1Hz i niestety nie wychodzi mi to. Taimer 1 mam skonfigurowany jako taimer (Config Timer1 = Timer , Prescale = 8) taimer 0 skonfigurowany jako licznik (Config Timer0 = Counter , Edge = Falling ) z resztą zamieszczam fragment kodu [syntax=basic4gl]$regfile...
a czy mógłbym w takim razie prosić o jakiś przykład z getrc5? ja używam czegoś takiego: '---------------------------------------... ' RC5.BAS ' (c) 2000 MCS Electronics ' oparte na nocie aplikacyjnej AVR410 f-my Atmel '---------------------------------------... $regfile "m1280def.dat"...
Nie. Timer1 jest używany jako podstawa czasu, SECONDTICKS mówi jak często pojawia się przerwanie od timera 1. Użycie któregokolwiek z trybów PWM zmieni np. wyzeruje timer1 i odbieranie DCF nie będzie działało poprawnie. Możesz wykorzystać inny timer z PWM, albo wykorzystać nowy mikrokontroler Atmega168, gdzie timer0 ma też PWM.
"Tą" liczbę masz zapisaną w zmiennej Liczba_przerwan_tim0 a nie w ośmiobitowym (czego się chyba obawiałeś) rejestrze timera0 - więc nie ma problemu.
Do drasmen: jeżeli chcesz aby układ zadziałał musisz przestawić fuse bity na wew. generator np. 8MHz a do pinów gdzie podłączasz kwarc musisz wpiąć kwarc zegarkowy 32.768kHz. Program dla autora tematu: 'Program wykorzystujący przerwanie od timera0(8 bitowego) generowane co 8ms 'jeżeli przerwanie zostanie wywołane 125 razy, otrzymamy 1 sekundę...
witam. Napisałem taki oto program. LCD jest podpięty w trybie 4ro bitowym. y=53 x=3y=53 Za jakiś czas zaś lcd jest pusty. Jeżeli w pętli głównej zmienię waitms 50 na 1000 to program dłuższą chwile wszystko pokazuje dobrze, ale i tak prędzej czy później na lcd pojawiają się krzaczki niczym z matrixa. Mój tok rozumowania jest taki; w pewnym momencie gdy...
mam jeszcze jedno pytanie dorwałem program w bascomie wsad do innego sterownika na podstawie jego zaprojektowałem schemat . Moje pytanie jest takie czy nie popełniłem błędu w rozumowaniu i na podstawie tego będzie to chodzić ?. I ostatnie pytanie nie rozumiem co ma w programie robić pinD.2 program się wiesza jak zaremuję to (input ster) to program w...
w zasadzie wystarczyła by mi komenda SET z możliwością ustawienia pinu na określony czas. Nie przypominam sobie jednak takowej... ktoś mnie naprowadzi? W momencie ustawienia pinu, wrzucasz też do zmiennej jakąś wartość, proporcjonalną do czasu trwania tegoż ustawienia. Jakiś Timer, na przykład Timer0, generuje cyklicznie przerwania (np. co kilka milisekund)...
zbudowałem układ nadajnika według Twojego pomysłu i działa bez problemu dioda IR przez 100Ω odbiorniki na ATMega 8 i ATTiny 13 czujnik TSOP zasięg ok. 20 cm , program na 13 zmieniłem aby kontrola czujnika była w pętli $regfile "attiny13.dat" $crystal = 9600000 Config Pinb.4 = Output Config Pinb.3 = Output Config Pinb.1 = Input Config...
Oczekujesz pomocy a nie dałeś kodu! Już lecę do Wróżbity Macieja! Bascom ma tyle błędów co Windows. Z osobna to wszystko działa, jak chcesz uruchomić kilka rzeczy to już nie. Nie ma się co tym przejmować, bo w Arduino i HAL dla STM32 jest tak samo. Zgaduję (kodu nie ma, a Wróżbita Maciej jest akurat zajęty), że używasz Bascom do konfiguracji PWM. Użyj...
Dziękuje wszystkim za pomoc. Program poprawiłem, działa. No nie do końca tak jak bym chciał:) A mianowicie program obsługi przerwania podaje mi impuls co 2 sek. A powinien co 1 sek. Próbowałem już inaczej przeliczać wartość tak aby uzyskać czasookres impulsu 1 sek Załadowałem do licznika wartość o połowę niższa czyli 125. Teoretycznie powinno pomóc....
Przesyłam fragment kodu dla "paluch_gda" jedną cewką zapłonową na dwa obroty wału (pełny cykl pracy) na jednej cewce generowane są 4 takie "odcinki czasu" (iskra przeskakuje po raz na każdej ze świec), więc na 1 obrót wału przypadają 2 "odcinki czasu". Dzielimy więc wartość Nr (liczba "odcinków czasu" w 1 minucie) przez dwa i otrzymujemy prędkość obrotową...
Miałem coś podobnego ale tylko dla 1 DS: http://www.elektroda.pl/rtvforum/topic16... Dla większej ilości jeszcze nie obliczyłem i nie sprawdziłem. Ostatni program jest dobry i działa- przerwanie co 4ms. Może spróbuj iść w tym kierunku- ale czas odczytu DS sprawdzałem na oscyloskopie- dla większej ilości DS- trzeba sprawdzić.
Witam, Nie będę zakładał nowego tematu. Mam podobny problem. Atmega 2560 + 16Mhz. Przy tym ustawieniu timera przerwanie powinno być generowane co 0,5s. Natomiast jest generowane co 1s. 256/16000000= 16us*65536=1,048576s 65536-31250=34286 co daje 0,5s [syntax=basic4gl] $regfile = "m2560def.dat" $crystal = 16000000 Config Portg.5 = Output : Portg.5 =...
Zegarek oprócz funkcji wyświetlania czasu ma pokazywać temperaturę i mieć możliwość sterowania z pilota (RC5). Normalnie (by default) Bascom używa Timer0 dla RC5. Jeżeli Timer0 masz zajęty do inego celu, więc potrzebujesz skonfigurować Timer2 dla RC5. e marcus
Witam Potrzebuję pomocy w przeportowaniu kodu źródłowego z BASCOM na C (Atmel Studio 6) - mikrokontroler ATMEGA128 Na początek fragment takiego kodu: [syntax=basic4gl] Config Adc = Single , Prescaler = Auto , Reference = Avcc Config Timer0 = Timer , Prescale = 1024 Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Disconnect , Compare B Pwm = Clear Down...
To nie Bascom jest przyczyną tylko źle napisany program ;). 1. odczyt timera1 16bit odbywa się po przez rejestr pomocniczy TEMP, ten rejestr jest też używany przez inne procedury i funkcje i jeśli jest użyty to właśnie niszczona jest wartość High timer1 bo ona tam jest wpisana gdy używasz komendy. wpisując tak timer1 do tablicy możesz gubić High timer1....
Do Pawelj Nie będę wnikał co jest lepsze pomiar prądu czy też inne rozwiązania ale odpowiem Ci wprost na twoje pytanie dotyczące zliczania impulsów. Sygnały z impulsatorów podłącz pod 1 i 2 nogę Atmegi16 są to wejścia zliczające liczników Timer0 i Timer1 Skonfiguruj timery Config TimerX = Counter , Edge = Rising lub Config TimerX = Counter , Edge =...
Witam! Na podstawie informacji zawartych w książce "Programowanie mikrokontrolerów w języku Bascom" jak i wiedzy, którą udało mi się przyswoić piszę proste programy. Ostatnio zacząłem się interesować PWM'em jako sterownikiem wentylatora lub regulatorem oświetlenia. Oto program: [syntax=basic4gl]$regfile = "m8adef.dat" $crystal = 8000000 Config Pinb.1...
Już wiem co powoduje wyświetlanie komunikatu błędu. Jak zaremowałem wszystkie linijki treści: "Getrc5(address , Command)" - jest ok. TIMER0 jest wolny, tylko Getrc5 domyślnie z niego korzysta. Wykorzystuję jedynie TIMER2 do multipleksowania. Kod jest bardzo długi bo jest tam sporo zbędnych bajerów. Trudno będzie Wam w nim się doszukać błędu. Zrobiłem...
He..He.. W książce kilkanaście rozdziałów wcześniej napisali. „W mikrokontrolerach AVR nie jest, zatem możliwe swobodne ustawianie priorytetów źródeł przerwań, tak jak to jest np. w 8051. Czasami może zdarzyć się, że podczas obsługi jednego z przerwań potrzebne będzie obsłużenie innego przerwania.”.. bla..bla..”Wykrycie przez odbiornik...
Tylko proszę mi podpowiedzieć, czy dobrze rozumiem nazwy kanałów i ich timerów Timer0 - Pwm0 Timer1 - Pwm1a, Pwm1b Timer2 - Ocr2
Wielkie dzięki ;) Rezystor całkowicie rozwiązał problem. Moze i rozwiazal jeden z problemow i to nie calkowicie. Popatrz na swoj kod: Licz: Incr Przerw0 If Przerw0 = 3125 Then Incr Setne Czy na pewno beda to setne sekundy? Druga sprawa to jest bledem umieszczenie startu STOPERA w "Do ... loop, uzaleznione od stanu pinu. Od momentu nacisniecia przycisku...
(at)emarcus: O ile się nie mylę, przy prescalerze 64 i cżestotliwości 8MHz timer0 będzie miał skok co 8us, czyli licznik bedzie przepełniał się co 2,048ms, więc do poprawnego odliczenia 1s w obsłudze timera należy załadowywać do niego Timer0 = 6, i dodać licznik, który 500 razy zliczy przepełnienia. A co do tych parametrów, to zawsze wstawiałem domyślne...
Witam Męczę się nad uruchomieniem obsługi RC5 w Atmega128 na pinie E.4 (INT4). Konfiguracja wygląda tak: [syntax=basic4gl] Config Rc5 = Pine.4 On Int4 Readir Config Int4 = Low Level Enable Int4 [/syntax] Procedura odbioru tak: [syntax=basic4gl] Readir: Disable Int4 sei Getrc5(adres , Rozkaz) Rozkaz = Rozkaz And &B01111111 Return [/syntax] Generalnie...
16000000/256/250 = 250 to jest 4ms Nie wiem skąd u Ciebie się wzięło 8ms. Przy takim zapisie jw. to Load Timer0,250 jest prawidłowe.
Sorry, Wiesz ja to sie z tym bawie tylko i program pisze w bascomie metoda prob i bledow. Nie ma większego znaczenia w jakim środowisku programujesz (Basic albo C). Istotny jest koncept projektu i sposób rachunkowy, reszta to tylko inna forma zapisu programu. Wybrałeś za narzędzia: Timer1 i jeden z interruptów zewnętrznych. Zatem jest tez bez znaczenia...
Witam Ja osobiście zrobił bym to porządnie czyli z urzyciem przerwań, bez żadnych podprogramow, korzystając z etykiet. Ponizej przedstawiam przykladowy kod. Mogą być w nim literowki gdyż pisałem prosto z palca bez kompilacji: '************* Konfiguracja uC ***************** '***************************************... $regfile = "m8def.dat"...
bascom timer0 timer0 bascom atmega timer0
kolumny jazzu dekoder odbioru polsatu drukarka laserowy awaria
Moduł bębna i toner w Xerox® WorkCentre® 6605 Duży pobór prądu przez klimatyzację na postoju – przyczyny i rozwiązania