Którą wersję Bascoma używasz? 1.11.8.1 Nic nie poradzę że pod ustawieniami ATMega16, ATMega161, ATMega162 nie działa. Pod ATMega161 licznik ożył ale nie generowały się przerwania. Dziwne - ale prawdziwe. A jak zamiast start TIMER0- wpiszesz do rejestru TCCR0 CS02=1, CS01=1 a CS00=0-to będziesz miał lepiej. Być może by zadziało... albo i nie bo wydaje...
nie wiem czemu przeskakuje do 8 od dołu "reti" po czym dochodzi do pętli głównej i co drugi krok wraca do tego nieszczęsnego "reti" Tam nie powinno być reti, a poza tym jako wektrów przerwań dla ATmega16 musisz używać instrukcji 'jmp', a nie 'rjmp'. Spróbuj zrobić tak: ..... .org 0x00 jmp reset jmp ext_int0 jmp def_vect jmp def_vect jmp def_vect jmp...
Witam! Mój problem dotyczy ATmega16 i przerwań w Bascom.Polega on na tym, że nie działają.Jeśli zadeklaruję w programie jakiego kontrolera używam $regfile = "m16def.dat" to nie działają ani w symulatorze ani w uC.Nie szukam przyczyny w kodzie gdyż nie działają nawet w najprostszych programikach,a drugi powód to taki,że wystarczy że zadeklaruję $regfile...
Witam, Napisałem program do odpytywania stanu klawiszy na Atmega16, kwarc-16MHz. Według wyliczeń przerwanie powinno sie pojawiać co 2,5ms, jednak tak nie jest, jest o wiele wolniej (ponad 1s). Analizowałem program i sam juz nie wiem co może być źle. Pomóżcie Preskaler clk/1024=16000000/1024=15625 1/15624=0,064ms 40*0,064ms=2,5ms #include <avr/io.h>...
Witam, mam pytanie: jak przejść z jednego przerwania TIMER2 do TIMER0 po wykonaniu operacji w pętli przerwania TIMER2??? #include <inttypes.h> #include <avr/io.h> #include <avr/interrupt.h> #include <avr/sleep.h> #include <avr/pgmspace.h> #include "font.h" static char dd; unsigned char PROGMEM Fnt[]= Font; int n=21,k,posun,jj,d,c,pp=0,l,d,riadok;...
Witam, Napisalem gdzie zaczyna sie problem, uk wywołuje przerwanie samoistnie, zaraz po globalnym zezwoleniu na przerwania sei() sam przechodzi do przerwania i je wykonuje. Chce mieć możliwość przerwania pętli while w jakimkolwiek momencie. Sposób jaki zastosowałem uważam za mało efektywny ale nie wiem jak inaczej się za to zabrać. Pozdrawiam #define...
Cześć, postanowiłem zmienić swój stary model Atmegę16A na nowszą wersję więc zakupiłem Atmegę168A-PU. Problem w tym, że za żadne skarby nie mogę zrobić na niej choćby prostego mrugania diodami za pomocą przerwań. Połączenia są zrobione dobrze, konfiguracja również. Ustawiony jest preskaler, uruchomiona globalnie obsługa przerwań, ustawiona jest odpowiednia...
To mój pierwszy kontakt z AVRami i od razu schody. Od kilku godzin próbuje uruchomić taki najprostszy programik wykorzystujący przerwanie od timera. Używam ATMega16 i kompilatora WinAVR (w różnych wersjach z tym samym skutkiem). Oto kod okrojony do minimum: #define __AVR_ATmega16__ #include <avr/io.h> #include <avr/signal.h> #include <avr/interrupt.h>...
Config Pinb.0 = Output 'konfiguracja portów Config Pinb.1 = Output Config Pinb.6 = Input Config Pind.3 = Input Portd.3 = 1 'podciągnięcia wejść Portb.6 = 1 Config Int1 = Low Level 'konifguracja przerwania Enable Interrupts Enable Int1 On Int1 Przerw Do 'petla glowna prgramu Portb.1 = 1 Portb.0 = 1 Waitms 500 Portb.0 = 0 Waitms 10 Loop End Przerw:...
Witam, Mam pytanie odnośnie przerwań w Atmedze16. Pisze program alarmu domowego i ten alarm musi wykorzystywac czujke ruchu ( taka jaka jest w tych wlacznikach do lamp halogenowych ). Na wysjciu czujnika w momencie gdy ktos sie poruszy jest napiecie 9V, a w trybie Sygnal od tego czujnika jest polaczony z INT0. Enable Interrupts Enable Int0 Config Int0...
Witam Ręce mi już opadają :( Już jakiś czas próbuję napisać zwykły program który wykorzystuje przerwanie od Timera przy jego przepełnieniu. Przeczytałem posty elektrody, dokumentacje procesora i nic. $regfile = "m162def.dat" $crystal = 16000000 Config Timer0 = Timer , Prescale = 1024 On Timer0 Przerwanie Enable Timer0 Enable Interrupts Do...
Witam Ucze sie programować mikrokontrolery, używam Vmlab'a i Winavr. Mikrokontroler to atmega16. Napotkałem następujący błąd: Program teoretycznie powinien dodawać do wyświetlacza co 300ms nowy znak. Wszystko jest ok dopóki nie włącze Timera. Jeżeli go uruchomię to znaki zamiast się dodawać zaczynają się nadpisywać (pojawia się tylko jeden znak na 1...
mam następujący problem: mam napisaną funkcję w której zastosowana jest kilkukrotnie komenda _delay_ms, następnie w programie musiałem zastosować Timer0 w trybie przepełnienia który jest odpowiedzialny za wyświetlanie(7-seg led) i przyciski, po naciśnięciu przycisku wywoływana jest funkcja zawierająca _delay_ms, co sprawia żę wyświetlanie się rozjeżdża(tzn...
Używam zegara PCF8583, działa mi jego obsługa itp, natomiast mam problem z jego przerwaniami. Układ jest skonfigurowany by generować przerwanie co 1s, po którym procesor ponownie ustawia odpowiednie flagi w zegarze, bowiem samo przerwanie jest jednokrotne. W celu inicjalizacji przerwań od zegara używam procedury: Sub Init_alarm I2cstart 'generate start...
Witam. Pisze program sterujący pracą silników krokowych. Pisałem cały czas tak program by mieć konktrolę nad prędkością każdego z silników osobno (chodzi o to że silniki mają różne przekładnie a chce by wszytskie elementy poruszały się z tą samą prędkością obrotową więc prędkość ustala się raz w programie i się jej później nie zmienia) Zastosowałem...
Wgrałem do Atmega16 prosty programik obsługi przerwań zewnętrznych (poniżej kod). #include <avr/io.h> #include <avr/interrupt.h> SIGNAL (SIG_INTERRUPT0){ PORTB = 0xFF; } SIGNAL (SIG_INTERRUPT1){ PORTB = 0x00; } int main(void){ DDRB = 0xFF; DDRD = 0x00; PORTD = 0xFF; GIMSK = _BV(INT0)|_BV(INT1);...
Wstyd się do tego przyznać, ale nie mogę sobie z tym poradzić. Chcę by przerwanie INT0 było wyzwalane zboczem opadającym. Kod źródłowy programu znajduje się poniżej: .nolist .include "m16def.inc" ;dołączenie listy stałych .list .cseg ;konfiguracja przerwań zewnętrznych .EQU ISC0 = 2 ;ISC00 i ISC01 aktywne zbocza opadające dla INT0 i INT1 .EQU...
Mam problem z komunikacją 1wire i jej kolizją z przerwaniami zewnętrznymi. Próbowałem wyłączać przerwania zewnętrzne na czas obsługi 1wire efekt jest taki, że temperaturę odczytuje bezbłędnie, niestety rozjeżdża mi się przerwanie zewnętrzne. Gdy, nie wyłączam przerwań zewnętrznych na czas obsługi 1wire program po czasie się wysypuje. Przerwania zewnętrzne...
Witam. Zbudowałem układ, który składa się z dwóch części. Pierwsza to generator o częstotliwości 125kHz, druga to przetwornik ADC, który mierzy sygnał i zapala diody w zależności od niego. Oba podukłady (podprogramy) oddzielnie działają poprawnie. Jednak jak skleiłem dwa kody (jeden od ADC drugi od generatora) to już zaczęły się schody. Jak dotąd nie...
Witam Mam problem z przerwaniem INT0. Mianowicie. Funkcję obsługi przerwania umieszczam przed "main", gdyż inaczej kompilator się nie kompiluje. Gdy funkcja obsługi przerwania jest pusta wszystko jest ok- tj ustawienie wszystkich bitów w rejestrach. Jeśli do funkcji obsługi przerwania "wrzucę" inne funkcje to wszystko się psuje. Dostaję błędy w postaci...
Witam mam taki problem z przerwaniami int0 chciałem podłączyć transoptor szczelinowy pod wejście int0 atmegi16 i zliczać impulsy tylko jest taki problem ze jak zasłonię szczelinę transoptora to zamiast mi dodać 1 impuls to dodaje mi albo 2 albo 10 jak padnie w czym może być problem poniżej zamieszczam kod i schemat [syntax=c] #include <avr/io.h>...
Problem rozwiązany: W urządzeniu używam INT0. INT1 i INT2. Sygnałem podłączonym do przerwań jest detekcja zera sieci (z 3 faz). Detektor generuje krótki ujemny impuls w momencie przekroczenia napięcia przez zero. INTy były ustawione na stan niski (a nie na zbocze). Gdy 3 detektory działały poprawnie (dawały ujemne szpilki w zerze) procesor widział je...
Kurcza miałem dużo LCD L2F50 ale wszystkie zużyłem. Więc nawet nie mam na czym przetestować tego kodu. Teraz mam dużo LS020 ale ani na nich tego nie przetestuję ani Ci tych LCD nie sprzedam bo już je pomontowałem w urządzeniach. Za miesiąc z kolei będę znowu miał dużo LCD L2F50 które to z kolei Cię nie interesują. Ale może coś wykombinujemy. A tak po...
Na podstawie artykułu: chciałem spróbować nastawić timer1 (16 bitowy) w ATmega16. Robię to w ten sposób: [syntax=c] #include <avr/io.h> #include <avr/interrupt.h> #define LED1 PC0 #define LED2 PC1 volatile uint8_t cnt=0; void main(void) { DDRC |= (1<<LED1) | (1<<LED2); PORTC |= (1<<LED1); TCCR1A |= (1<<CS12) | (1<<CS10);...
Ok, sprawdziłem. W trybie z korekcją czegość takiego nie ma. Używam teraz tego trybu, bo nie wiedziałem jak wyłączyć te COMy, zeby bylo automatycznie... Teraz druga sprawa: mam dwa przyciski na przerwaniach INT0 i INT1, ale mi one w ogóle nie działają. Celem głównym jest osiągnięcie przechodzenia w tryb uśpienia i jego budzenie, ale jak już wspomniałem,...
Próbowałem 2 sztuki ATMEGA162. Obie pracowały stabilnie na 20MHz. Program pisany w C, niezbyt skomplikowany (operacje logiczne, arytmetyczne, skoki warunkowe, dostęp do pamięci etc, nie wykorzystywałem timerów, przerwań, pamięci EEPROM).
Kapuję już powoli. Zaraz sprawdzę to tym programem hex2bin... muszę sprawdzić wielkość ponieważ napisałem prosty program na uC który obsługuje 2 przyciski i wyświetlacz LED (17segm). Za ich pomocą mogę wyświetlać wszystkie litery A-Z (nast./poprz.). Przyciski są podpięte pod przerwania na liniach INT0, INT1. I to mi działa idealnie. W kolejnym kroku...
Jest dostępny w wielu sklepachi: ...zapewne pojawią się głosy, że dziś nie warto się uczyć 8-bitowego uK, ale ja powiem, że warto. Do nauki jest w sam raz, nie ma się co od razu rzucać na głęboką wodę. To prosty uK, który można szybko opanować i szybko obserwować efekty nauki. Owszem, nie ma DMA, nie ma priorytetów przerwań, ale początkującemu to nie...
Witam. Próbuję nawiązać łączność z zegarkiem pcf8583 poprzez interfejs I2C,ale interfejs nie generuje nawet znacznika przerwania TWINT po wyslaniu bitu startu.Poniżej zamieszczam kod, który to realizuje (tak myśle:). #include <avr/signal.h> #include <avr/interrupt.h> #include <avr/io.h> #include <stdlib.h> #include "lcd.c"...
TO BEDĘ ZGADYWAŁ:-) Wyłączyłes przerwanie od timer0 jak uzywasz timere 2? moze po wrzuceniu w atmege wykonują sie obydwa przerwana wiec bedzie efeakt jakby chodził zegar dwa razy szybciej. W asemblerze nie do pomyślenia taka sytuacja nie wiem jak w C ustawia kompilator warinki poczatkowe? moze musisz zadeklaraowc wszystko? wrzuc sobie na ekran LCD wartosc...
(at)t0maszu - zapomnij o takim sterowaniu serw. Kod na stronie nadaje się tylko do demonstracji, tego typu realizacja powoduje 100% zajęcie każdego MCU. Ponieważ nie może on robić nic innego, w realnym programowaniu ten kod się nie sprawdza. Jeśli cokolwiek wstawisz do pętli, albo odblokujesz przerwania to serwa zaczną radośnie tańczyć. Więc po prostu...
:arrow: uruchonienie PWM jest proste - wystarczy zaladowac odpowiednie liczby do rejestrow licznika. poczytaj datasheet z www.atmel.com :arrow: klawisze gora/dol mozesz podlaczyc pod przerwania zewnetrzne i w podprogramie obslugi przerwania tylko modyfikujesz zawartosc jednego rejestru licznika - odpowiedzialnego za wypelnienie przebiegu. pamietaj o...
To że w tym rejestrze jest inna wartość po wysłaniu raczej świadczy o prawidłowym działaniu komunikacji- pod warunkiem że to wartość jakiej się spodziewasz. Ja podłączałem kiedyś pod '51 ADC i nie mogłem ruszyć transmisji na SPI puki nie wpisałem do rejestru SPI dowolnej wartości. Ktoś gdzieś podpowiedział mi, a ja to później znalazłem w jakieś nocie...
Hey ! Oto poprawiony kod - znaczy z Twoimi dopiskami :) 'częstościomierz 'zmienne użyte w programie Dim Jednostki As Byte , Dziesiatki As Byte , Setki As Byte , Tysiace As Byte , Ktorywysw As Byte Dim Tysiace_1 As Byte , Tysiace_2 As Byte , Tysiace_3 As Byte , Tysiace_4 As Byte Dim Timebase As Word , Wynik As Word 'konfiguracja portów 'Port A - segmenty...
Dla mnie zniekształcenia nie są nawet takie ważne. Chodzi o to by wygenerować przebieg. Można by go potem ew. przepuścić przez bramke Shmitta i wzmacniacz. Generacja na przerwaniach tu chyba odpada, ze wzg na wydajność przy tej częstotliwości. Myśle że sprzętowy timer dał by rady, tyle że wtedy nie mam kontroli nad kształtem, ale to jeszcze nie tragedia....
Witam. Zająłem sie tworzeniem prostego generatora DDS na ATmega16. Przetwornik to drabinka R-2R. Rozdzielczość 8 bitów, kwarc 8MHz (oczywiście możliwa zamiana na 16MHz). W pamięci mikroprocesora przechowuje 256 próbek sygnałów (np. sinus, piła). Poprzez tryb CTC Timer1 (preskaler ustawiony na 1) obsługuje przerwanie. Niestety napotkałem na problem -...
Witam. Mam problem z przetwornikiem A/C w ATmega16. Chciałem aby wyniki były wyświetlane tylko w momencie kiedy wartość w timerze 0 zrówna się z wartością w OCR0 - ale tylko co drugi raz. Dlatego też dałem switch(cykl). Wyjście OC1A jest podpięte do wejścia timera 0. Wiem że to dziwnie, ale jest to część większego programu i tak musi być. Pomiar napięcia...
Witajcie, w jaki sposób można optymalnie odczytać przesłany (aż do znaku nowej linii / powrotu karetki) ciąg znaków od przerwania otrzymania danych? /* * Sterowanie przez RS232 (main.c) */ #include "defines.h" #include <ctype.h> #include <stdint.h> #include <stdlib.h> #include <stdio.h> #include <avr/interrupt.h>...
Czołem! Chciałem napisać własną funkcję delay_ms w oparciu o timer procesora Atmega168. Namęczyłem się z tym strasznie, aż w koncu wziąłem gotowca - trochę przerobiłem - i dochodzę do takich wniosków, że Ten kod nie działa(nie wiem czemu) - próbuje w nim mrygać diodą przypięta do portu B za pomocą odczekiwania 10[jednostek czasu] poprzez wywołanie funkcji...
Dzień dobry, Urządzenie powstało w celu monitorowania poziomu wilgotności w pewnej zamkniętej przestrzeni. Przekroczenie zadanego poziomu jest sygnalizowane sygnałem dźwiękowym (buzzer) i świetlnym (LED). Wartości z ostatniego pomiaru można w każdej chwili odczytać, po naciśnięciu przycisku, na wyświetlaczu siedmiosegmentowym LED. Dane z poprzednich...
Witam, Próbuję korzystać z biblioteki Peter Fleury do obsługi usart-u, której listing znajduje się poniżej: PLIK uart.c /***************************************... Title: Interrupt UART library with receive/transmit circular buffers Author: Peter Fleury <pfleury(at)gmx.ch> http://jump.to/fleury File:...
Mam prosty program licznika oparty na wyświetlaczu led. Program nie dokonuje przerwań z timerów. Czy może ktoś jest w stanie rozjaśnić co jest nie tak? Czy jest możliwość, że fuse bit'y od przerwań są źle ustawione? Ten sam program wgrywając do M16 za pomocą STK500 działa sprawnie tylko wtedy, gdy w bascomie ustawie zamiast M16-90S2313 (oczywiście należy...
Witam! Mam drobny klopot z przerwaniem PCINT0 w ATMega162. Chce miec przerwanie od 5 przyciskow. Ogolnie przerwanie jest zglaszane i obslugiwane tyle ze nieco chaotycznie. Na co wlasciwie reaguje to przerwanie? to znaczy na jaki stan, niski czy wysoki? (jak dla mnie powinno raczej na niski z racji podlaczenia pull-upa wewnetrznego). I jeszcze pytanko...
Procesor, Atmega16, nic wielkiego, zaraz sprawdze ten kod. Podczas nauki kozystam z tego opisu avr-gcc: Tam zasugerowano uzycie tej instrukcji. Dodano po 5 A więc tak: W orginalnym kodzie miałem dołączony nagłówek <io.h>. W dalszym ciagu nie moge skompilowac programu. Kod wygląda tak: #include <avr/io.h> #include <avr/interrupt.h>...
- Program wygląda w porządku, ale obsługuje tylko 2 enkodery (wejścia ENC_A i ENC_B). raczej jeden enkoder, A i B to przesunięte w fazie kanały tego samego enkodera. Dużo zależy od szybkości działania tych enkoderów - wywołanie przerwania i jego obsługa zajmie kilka cykli - przy programowej obsłudze 8 linii zrobi się gęsto od if'ów (4x to co juz jest),...
Ja robię to tak: 1. Zasilam płaszczyznę X, odczekuję chwilę (ok. 30ms) i odczytuję napięcie z płaszczyzny Y. Port odczytujący jest "podciągnięty" do +zasilania. 2. Przełączam zasilanie na płaszczyznę Y i robię to samo odczytując z płaszczyzny X. Przerwa jest konieczna, ponieważ panel ma pewną pojemność. Całość działa bez problemów, procedurka jest obsługiwana...
Nie musisz koniecznie robić na przerwaniach. W pierwszym przybliżeniu możesz całą obsługę robić w main, np: #define BUFLEN 16 #define SEPARATOR '\n' char buffer[BUFLEN]; int main() { ... for(;;) { int i = 0; for (;;) { unsigned char c = UART_Receive(); if (c != SEPARATOR) { buffer[i]...
Witam, Dopiero wziąłem się za obsługę przerwań i przeglądając różne artykuły próbuję zrobić prosty program, który zgasi mi diodę. Niestety dioda świeci się non stop, nawet bez użycia przycisku. Korzystam z Atmega16. Przycisk mam podłączony do pinu PD2 czyli przerwania INT0, natomiast dioda jest podłączona do portu PA0. Program wygląda następująco: [syntax=cpp]...
Układ nadążny za słońcem- inaczej układ śledzący, jest rodzajem układu sterowania, który umożliwia automatyczne lub półautomatyczne wodzenie za Słońcem. Układy tego typu wykorzystuje się najczęściej w celu znacznego podniesienia wydajności baterii fotowoltaicznych lub kolektorów słonecznych. Podstawowym założeniem projektu jest realizacja układu nadążnego...
Witam, Korzystając z ostatnich wolnych dni przed studiami chciałbym zaprezentować moją ostatnią konstrukcję. Jest to mały przenośny barometr. Konstrukcja powstała na potrzeby osoby wrażliwej na zmiany ciśnienia oraz spełnia jej wymagania tzn. mały rozmiar( 20x40x9mm) oraz co się z tym wiąże - mobilność. W krótkim czasie planuję rozbudować urządzenie...
Witam Ostatnio kupiłem sobie standardowy moduł ethernetowy oparty na tymże scalaku. Posiada wbudowane transformatory i inne tego typu rzeczy, ogólnie jest wyposażony we wszystko czego potrzeba. Już miałem uruchamiać całość na ATmega88, bo na Tuxgraphics jest cały artykuł wraz ze źródłami o tym jak to odpalić na tym mikrokontrolerze, ale znalazłem poradnik...
Witam Posiadam Atmega162. Piszę w AVR studio 4 - ASM. Programator to USBasp, programowanie za pomocą mkAVR Programuję oba usarty tak samo aby przekazywał z RXD0 na TXD1 natomiast RXD1 na TXD0. Tak wiem że to bez sensu ale taki chcę omówić z wami przykład. Pytanie brzmi dlaczego dane przechodzą z RXD0 na TXD1 natomiast z RXD1 na RXD0 nie. Jest to wykonane...
Oczywiście, że przejdzie na samych przerwaniach. Tyle że po pierwsze co mają przerwania do stabilności i precyzji wbudowanego oscylatora RC. A po drugie wybrany przez Cieie program, wybitnie mało z tych przerwań korzysta.
juz dziala cos nagle mu sie odmienilo i zadzialalo na procesorze a w bascomie symulator i tak nie dziala na atmega16.
Witam, Musze zrobic szybkie przerwanie od timera w atmega162. W związku z tym nie moge sobie pozwolic na korzystanie z pamięci SRAM i stosu, więc zostają tylko rejestry, wystarczą 3, w tym dwa wskaźnikowe np. X. No więc w właściwym programie te rejesrty nie mogą byc użyte, ani modyfikowane. Czy da się to zrobic w AVG-GCC? Przepisywanie dużego fragmentu...
Witam serdecznie. Nie umiem sobie poradzić z pewnym problemem. Za pomocą prostej pętli odczytuję wartość z ADC i przedstawiam ją na LCD. Jest wszystko OK - wynik nie zmienia się nawet po zresetowaniu procka. Teraz inny program. Procek jest w pętli i naciśnięcie przycisku powoduje wyjście z pętli i skok do pętli odczytującej dane z ADC. Są rozbieżności...
A jesteś pewien, że właściwie ustawiłeś typ procesora? Bingo! Wraz z programem dla Atmega8 przeniosłem plik makefile (używam avr-gcc pod ilnuksem), w którym wpisany był procesor atmega8 a nie atmega16. Wszystko działa tak jak chciałem, do pozostałych uwag również się zastosuję. Dziękuję za pomoc.
Witam, Kiedyś znalazłem gdzieś na necie takie rozwiązanie problemu małej ilości przerwań zewnętrznych w atmega16. Czy może ktoś wytłumaczyć dokładniej działanie tego tworu ? Chodzi mi głównie o techniczną sprawę i sens użycia tych diod. Oczywiście te X to microswitche dołączone do masy.
Procesor to Atmega16. Zauważyłem, że przy włączeniu zasilania układu przerwanie zostaje wykonane 4 razy; po resecie tylko raz.
Ad1. Tak jest prawidłowy. Zawsze można rozwiązać inaczej. Przede wszystkim używać definicji - zamiast: Ustawianie i zerowanie bitów
Witam Też mnie to dziwi, ale może wyłącz niepotrzebne w tej chwili przerwania.
kbw - nie bądź ryzykantem i zbuduj prototyp. Układ jest na tyle banalny że zrobisz go na jakiejkolwiek płytce uniwersalnej. Wyjdą ci wszystkie bzdety źle wpływające na działanie. Zawsze lepiej jest odkłócić przycisk kondensatorem niż bawić się w dziwne rozwiązania programowe. Tzn, programowo i tak musisz zrobić debounce ale "sprzętowo" odkłócony przycisk...
Wyrzuć return sprzed while(1) w main() ! Usuń powody wszystkich ostrzeżeń kompilatora - przed tym return też zapewne ostrzega. 8000000 / 1024 / 201 to ok. 39 Hz dla KROKU Twojego programowego PWM, ale u Ciebie okres PWM ma 256 kroków, czyli ponad 6 sekund - z takim okresem powinien zmieniać się stan wyjścia. stanleyst: Jedynym skutkiem deklaracji cnt...
Kuniarz program jest dobry bo działa na 8-ce. Dlatego pytam o ten RXD. Poniekąd rozwiązałem problem. W AVR Studio można zmieniać procesor jaki ma być programowany i gdy wybiorę: atmega16a to pomiar jest wykonywany, ale wtedy przyciski które mam podłączone do PIN-ów odpowiadających za przerwania zewnętrzne, resetują mi cały program(liczniki) i nie spełniają...
Witam! Temat już dawny, ale ja miałem podobne problemy gdy próbowałem zrobić kartę graficzną na Atmega16-16MHz i AVR-GCC. W moim przypadku wina leżała w nierównej ilości cykli pomiędzy sygnałem synchronizacji a wyświetleniem pierwszego piksela. Różnica 1 cyklu powodowała widoczne opóźnienie/przyspieszenie wyświetlania całej linii w stosunku do sąsiedniej,...
Portów to można użyć i jednego ;), a pinów to wystarczy trzy, pod warunkiem, że zamiast ATmega16 użyjesz ATmega164 (identyczny rozkład wyprowadzeń) z przerwaniami typu PCINT (Pin Change INTERrupt).
Witam, Pierwszy raz próbuję komunikować po SPI atmega8 z atmega168 i mam z tym problem. Mega168 jest masterem, w jego programie wywołuje procedurę SPI_MasterInit() a następnie co sekundę SPI_MasterTransmit(char cData). I tu pojawia się pierwszy problem: podglądając oscyloskopem statusy linii mam przebieg zegara nie na SCK ale na SS, na MOSI stan zmienia...
Witam mam taki problem gdy uruchomię ten program to żarówka bardzo miga. Zliczyłem ilość wywoływanych przerwań i wyszło że na 400 detekcji zera jest 100 przerwań od timera w czasie 4 sekund. Więc detekcja zera działa prawidłowo. Używam Atmega168, kwarc 16Mhz. F_CPU ustawiłem w kompilatorze i działa napewno 16Mhz
Witam. Otóż mam taki problem ;) Dwa czujniki DS18b20 podłączone są do osobnych pinów Atmegi168, PINB0, PINB1. Chciałem to zrobić w ten sposób aby w przerwaniu ustawiana była flaga (co sekundę) która realizowana była w pętli głównej while(1), w ten sposób, aby co sekundę na zmianę wykonywany został convert oraz odczyt. Wydaje mi się, że wszystko zrobiłem...
Reflektując się.. jesli kogoś uraziłem to wybaczcie ale już mnie trafia jak można zmarnować pół dnia na uruchomienie timera. Poniżej program który napisałem tylko po to żeby uruchomić timer. Kod ten jest bez ustawiania portów in/out jak i bez definicji zmiennych. Jedynej zmiennej "Czas" używam do przechwycenia wartości timera. Dodano po 25 Dodano......
Taki wyświetlacz już dawno rozpracowałem na 8515 , wystawiasz na piny odpowiednie stany a na BP przeciwny, w pętli lub przerwaniu zmieniasz stan tych pinów z częstotliwością około 30Hz na przeciwny i po problemie. Albo przy pomocy kilku cd4094. Najlepiej w przerwaniu, przebieg musi być o wypełnieniu 50%. Składowa stała >50mV może szybko doprowadzić...
Witam, w poniższym programie występują niepożądane resety, sprawdzałem już wartość rejestru MCUCSR i tuż po resecie ma wartość 0 czyli jest to reset programowy. zorientowałem się, że źródłem jest wywołanie instrukcji odpowiadającej za przerwanie komparatora analogowego (w oknie disassembly adres 0x00000020), które jest wyłączone... nie wiem co powoduje...
Witam, buduję sobie układzik, mający sterować diodą RGB (za pomocą PWM) na podstawie danych odebranych przez interfejs SPI (mikrokontroler działa jako SPI Slave). Napisałem program, w którym w nieskończonej pętli odbierane są 3 bajty, a w przerwaniu timera ustawiane jest odpowiednie wypełnienie dla diod. Jednak efekty działania programu są jakieś bezsensowne....
Sprawdzałeś jak się ta transmisja zachowuje kiedy Twoje inkey() w ogóle nie jest używane ? Nie wiem co sobie wkompilowuje Bascom w procesor ale może używa jakiegoś przerwania które z kolei w ten czy inny sposób oddziaływuje na transmisje RS232. Dajmy na to jeśłi RS232 używa przerwań do odbioru lub wysyłania a jakaś inna procedura czy funkcja po wyjściu...
Tak wyliczone dobrze jest. Opisze jeszcze dokladniej problem bo zauwazylem cos jeszcze. Atmega162 na ustar1 odbiera informacje od atmegi8 ktora znajduje sie na innym pcb. Czyli w sumie mam 3 pcb 1. ft232rl 2. atmega162 3. atmega8 polaczone jest przewodami pc -> ft232 -> atmega162 -> atmega8 Wysylanie informacji jest inicjowane poprzez przerwanie na...
Program bootloadrera jest ładowany na końcu pamięci. W chwili uruchomienia programu użytkownika wykonywany jest skok z boot'a do adresu zero (czyli na początek pamięci) (albo gdzie tam chcesz - zależy tylko od własnych preferencji i ustawień w linkerze). Największa zabawa z boot'em polega na jednoczesnym czytaniem i pisaniem do pamięci flash - i tu...
Jeśli piszesz w WinAVR i otworzysz plik w asemblerze to zobaczysz, że każde nie używane przerwanie prowadzi do resetu. Nieużywane tzn. nie posiada funkcji obsługi przerwania. Przerwanie takie od np. przepełnienia timera może nastąpić jeśli zostanie odblokowane, ale jak mówisz w tym przypadku to nie to. Możesz po prostu wyłączyć watchdoga i upewnić się...
Witam, znalazłem na tym forum kod dekodujący sygnał rc5, ale nie do końca go rozumiem i chciałbym prosić o pomoc. Kod: #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> #define RC5BitHigh() (bit_is_set(PIND,PD3)) #define RC5BitLow() (bit_is_clear(PIND,PD3)) #define...
Zamień Sterowanie żarówką działa jeśli nie włączę timera. To nie timer robi problem, tylko kompilator.
witam, próbuję osbłużyć akcelerometr ADXL345 po i2c, ale komunikacja zawiesza się po pierwszej komendzie i w ogóle program nie wchodzi do pętli while(1). jak zakomentuje linijkę: i2cTransmit(ADXL345, POWER_CTL, 0) w mainie; to ATmega wysyła po USARCIE dane bez problemu, w przeciwnym razie zawiesza się. o to listing programu: ATmega168 + 20 MHz, na samym...
Witam: Mam problem, potrzebuję odczyt z pilota w przerwaniu a nie chce działać. Poniższy kod nie działa, natomiast to samo w pętli głównej działa: [syntax=basic4gl] $regfile = "m168pdef.dat" 'deklaracja rodzaju procesora (tutaj Atmega168p) $lib "mcsbyte.lbx" $crystal = 8000000 'taktowanie Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down ,...
Te dziwne rzeczy o których piszesz w swoich postach, to po prostu efekt pisania blokujących się programów. Otóż odpalając funkcję _delay() na okres czasu jaki ma odmierzyć, zatrzymujesz procesor, który wtedy mieli bezproduktywnie w kółko, nie robiąc nic poza tym. Do tego, jeśli nie wyłączysz przerwań na czas wejścia w _delay(), przerwania przerywają...
A w jaki sposób mogę wygenerować 2 sygnały PWM za pomocą jednego timera? Korzystając z przerwania od porównania bądź przepełnienia i "ręcznego" zmieniania stanu pinów na przeciwny. Przy okazji w takim przerwaniu mógłbyś uruchamiać ADC co drugi cykl co by rozwiązałoby Twój problem. Oczywiście czas do następnego przerwania musi być dłuższy niż czas przetwarzania...
Witam! Dopiero zaczynam i nie mogę sobie poradzić z poprawnym zliczaniem w przerwaniu pochodzącym od Timera2 w trybie CTC. Chciałem wykorzystać programowe Timery, które są pomysłem Pana Kardasia (korzystam z jego książki) do tego aby jeden z nich tykał co 1sek. Zacząłem, więc tak: 16MHz/1024/125/125 daje teoretycznie "cyknięcie" co sekundę, a u mnie...
Musiałem go wyeksportować i przez avrdude wgrać do atmegi No i prawidłowo, kompilujesz do HEX i wgrywasz zewnętrznym programatorem. Ew. masz opcję upload using programmer (sketch), a programator określasz w menu tools opcja programmer. Tam robiłem, a próbowałem robić tak jak napisałeś to nie wykrywało mi programatora. Ale i tak w sumie mi nie działa...
Napisałem i wgrałem do ATMEGA16L (tylko taki mam na stanie :) ) coś takiego : $baud = 1200 $crystal = 1000000 Enable Urxc Enable Interrupts On Urxc Przerwa Dim I As Byte Do Loop Przerwa: I = Udr Print "Wartosc = " ; I ' do testów czy cos odbiera Print "Znak = " ; Chr(i) ' do testów czy cos odbiera Return End Wszystko...
Mam problem z UART w ATMEGA162 16PU Procesor z kwarcem 11059200 Hz zasilany 3,3V Potrzebuje prędkość 9600 b/s #include <avr/io.h> #include<inttypes.h> #include<avr/interrupt.h> #include <util/delay.h> #include <avr/wdt.h> //#include"../lib/rs232.h" #define FOSC 11059000// Clock Speed #define BAUD 9600 #define...
trzeba przeprowadzić tak zwaną inicjalizację w C wygląda ona tak void rtl_init (void) { rtl_config_ports(); // konfiguracja linii komunikacyjnych rtl_reset(); // reset RTL8019A rtl_write(RSTPORT, 0x00); // wpisz wartość 0 do komurki Reset Port dlms(30); // czekaj 30 milisekundy rtl_write(CR, 0x41);...
moze pomogłoby połaczenie kilku programowanych równolegle liczników i na tej podstawie (przy odpowiedniej częstotliwości zegara) programować go wartością przy której liczniki zgłaszałyby przerwanie (przeniesienia albo pożyczki w zależności w którą stronę by liczył) wówczas może by można było mówić o nieco płynniejszej regulacji częstotliwości. Tylko...
Na początek kawałek kodu: [code] TCCR0A = _BV(WGM01); TCCR0B = _BV(CS00) | _BV(CS02); OCR0A = 156; TIMSK0 = _BV(OCIE0A); ISR(TIMER0_COMPA_vect) { PORTB ^= _BV(1); // do pinu zapięta LED }[code] Procesorek ATmega168 taktowany kwarcem 16000000. Chcę zmusić timer aby generował przerwania z częstością około 100 Hz. Czy powyższe ustawienie jest poprawne?...
Uchędożyłem sobie układzik w którym Atmega zapisuje sobie dwunastobajtowe paczki danych do czterech EEPROMów 24C512. Całość zasadniczo ładnie działa, jednak sporadycznie zdarza się błąd TWI nr 0x38 oznaczający "Arbitration lost in SLA+W or data bytes". Jak zdołałem ustalić, błąd ten występuje w trakcie wysyłania danych do pamięci, mniej więcej w środku...
Dodałem w Attiny2313 linię $baud = 9600 - Ustaw tryb slave w ATmega (I tak jest tylko odbiornikiem), będzie prościej, inaczej linie MOSI i SCK będą walczyć na Vcc i GND... ;) A czasem nie jest on już ustawiony ? tzn w MSTR w rejestrze SPCR domyślnie jest ustawiony na 0 czyli tryb slave. Może pokaże Panu ten rejestr : Spróbuję zmienić w przerwaniu na...
Natomiast drążąc dalej temat jak wyjaśnić to, że na atmedze16 przy identycznej kofiguracji fuse'ów wszystko działało elegancko? Na procku ATmega162 ale podobnie na ATmega88 itp ... też działa elegancko. Tyle, że trzeba doczytać w nocie i pamiętać, że domyślnie Watchdog jest włączony. I wcale nie trzeba go zaraz fusami wyłączać bo po co? Może się często...
Podświetlenie LCD wcale nie musi być z 3V3, tylko z Vcc USB, dzięki temu nie obciąża LDO z FT. Jeśli z jakiś magicznych powodów potrzebujesz 20MHz to wstaw XMEGA, będziesz miał nawet 32 MHz. Na dzielniku rezystorowym SPI i tak ci nie zadziała w sposób pewny dla CLK/2=8MHz, więc nic na tym nie zyskujesz. Tego całego klamota z ręcznym resetem wywal, bo...
Nie wiem co cię dziwi, przecierz masz do ADC podłączony dzielnik 1:5 (r4/(r1+r2+r3+r4) więc 0V na wejściu nie ma szans uzyskać. Czemu nie ma szans? Wystarczy na wejście podłączyć 0V. Przecież ten dzielnik nie dodaje żadnej składowej stałej. Do autora: Uśredniasz pomiar z 10 wartości. Ale co każdy obieg nieskończonej pętli głównej powinieneś wyzerować...
Witam skonfigurowałem wstępnie adxl345, jednak wyniki są błędne. Czy ruszam akcelerometrem czy ie pokazuje jakieś wartości na wyświetlaczu lcd. Mój sprzęt to: Atmega16A 1Mhz (testowane również na 8Mhz). Wyświetlacz LCD, ADXL345. W programie część na pewno jest dobrze napisana, gdyż jak zmienię szybkość SPI to na wyświetlaczu szybciej wyświetlają się...
Troche z innej beczki, jest możliwe wykonywanie dwóch warunków równolegle (np if), bo chyba to jest problemem w tym kodzie, że nie przeskakuje na drugi warunek, gdyż wykonywany jest jeszcze pierwszy. Co za tym idzie? mógłbym w warunku zliczać czas trwania sygnału, ale już nie byłbym w stanie przeskoczyć na np warunek skręcania silnikiem. A dokladniej...
Cześć. Wiecie, zamotałem się. Mam ATMega162, XTAL=16MHz. Potrzebuję aby Timer1 w trybie CTC zgłaszał przerwania co 1 sekundę. Mam ustawiony preskaler na 256, więc 16000000/256/1=62500 Więc czy do OCR1A (tryb 4) lub ICR1 (tryb 12) mam wpisać wartość 62500 czy 62500-1. Doczytałem że zerowanie licznika następuje w następnym takcie zegara po zrównaniu obu...
Zajrzyj do dokumentacji atmegi16 opis trybu CTC i rejestru TCCR2 ustawiłeś preskaler 8 i OCR2=0 czyli licznik liczy od zera do zera, kiedy osiągnie zero zostaje wyzerowany, cokolwiek to znaczy ;) Nie jestem w stanie stwierdzić czy licznik powinien zgłaszać przerwanie co 8 cykli zegara, czy częściej - warunek wystąpienia przerwania jest zawsze spełniony,...
Witam, Postanowiłem zapytać się Was bo już błądzę jak we mgle. Zaskoczył mnie kłopot z obsługą prostego ekspandera i2c pcf8574. Kilkukrotnie już korzystałem z tej kości gdy miałem oddalone przyciski czy diody świecące od procka i myślałem że temat mam przerobiony. Tymczasem w ostatnim projekcie za nic nie mogę się skomunikować z układem. Wcześniej korzystałem...
Przechodzę na Xmegę 32MHz z powodu pamięci i wydajność będzie porównywalna. :) Fakt, porównywalna. Np. liczbę 1 można porównać z liczbą 5. 32 MHz * 0.3 DMIPS/MHz też można porównać z 40 MHz * 1 DMIPS/MHz (F0x) ...albo z 84 MHz * 1.2 DMIPS/MHz (F401) Miałem nic nie pisać ale trochę manipulujesz faktami. Szybkość jest ważna, ale tylko jeśli jej potrzebujemy....
A skąd takie wyliczenia, że tylko 24 ? Mówimy o sprzętowym PWM i parametrach sygnału sterującego, o których napisałem (chyba, że akurat Twoje serwo jest inne). Zakładając, że dałoby się dobrać taką częstotliwość taktowania mikrokontrolera, gdzie (po ewentualnym zastosowaniu jednego z dostępnych preskalerów) 256 taktów timera będzie trwało 20ms (tyle...
Druga kwestia dotyczy softu. Chciałbym aby moja aplikacja odbierała znak po znaku z RxT i przechowowała go w tablicy w taki sposób: W przerwaniu należy odebrać znak i umieścić go w buforze - nic więcej. Analizą tekstu można się już zająć na spokojnie w pętli głównej (z oczekiwaniem lub real-time). A, i większość terminali zamiast "\n" czy nawet "\r\n"...
Zainkluduj bibliotekę przerwań, włącz przerwania sei() i stwórz procedurę obsługi przerwania ISR (TIMER1_COMPA_vect)
Jednak cuda się zdarzają SIGNAL (BYLECO) {;} a rezultat Build Action : ================================ D:\WinAVR\bin\avr-gcc.exe -gstabs -Os -mmcu=atmega16 -c -pipe -Wall -std=gnu99 ds18x20.c In file included from ds18x20.c:21: onewire.h:27:3: warning: #warning | experimental multi-bus-mode is not tested...
sumulator to symulator, ale trzasnołeś, 2000 lini nie mam pytań i w sumie nie dziwie sie że nie działa, ile czasu ci zeszło z całkowitą symulacją?. ja robie tak że uruchamiam program "małymi" kroczkami w docelowym urządzniu. W tedy jak coś spierdyle to mam mniej szukania. a tak to wiesz... sam nie dajesz rady zczaić o co chodzi. Jeśli sie przywiesza...
Witam mam nastepujacy problem: w swoim projekcie musze skorzystac z interfejsu RS485, zbudowalem odpowiednia " infrastruktore " oraz uzylem dwoch procesorow AT162 i 8. w ramach sprawdzenia czy wszystko gra, napisalem programik gdzie: AT162 sluzy mi za "mastera" i wysyla polecenie do At8 alby zapalil diode oto kod: At162: char *fifosio[]; //wskaznik...
port a oraz port c można skonfigurowac jako wejścia przerwan, wtedy masz ich aż 16-scie wiecej port a generuje jedno przerwanie, a port c drugie. oczywiście można ustawić dowolne wejścia jako "przerwaniowe" a pozostałe wykorzystać jak sie chce i to są te "or"
witajcie fachowcy... po przesiadce na wyższy uC dostałem wiecej potrzebnych mi przerwań i bonus (czytaj problem) a polega on na raczej mojej nieumiejetności zablokowania tego jednego przerwania nie blokując innych. mieszam w tych wszystkich dziwnych znacznikach i nic. w tle działają sobie dwa usart'y a na int2 jest klawiatura, i musi byc na int2, lecz...
Witam. W dokumentacji od atmega168 jest tak: 0x0006 jmp PCINT0 PCINT handler to chyba jest wektor przerwania od PCIE0 więc wygląda na to że jest to obsługiwane w bascom w takiej właśnie postaci jak napisałem poprzednio.Dla atmega168 przyjmuje mi kompilator wszystkie 3 przewidziane czyli PCINT0,1,2, myślę że traktuje to jako właśnie te 3 możliwe porty...
Witam ponownie, dorzucę jeszcze kilka kwiatków do uwag kolegi powyżej. Powinieneś sobie panie szankwny kolega autorze przyjąć zasadę gdy programujesz w asemblrzez, że po wejściu do przerwania odkładasz na stos uzywane w nim rejestry. Wiem, że twoja pętla główna ich nie używa ale podejrzewam, że o tym zapomnisz jesli nie poznasz tej zasady. a najważniejsze...
Witam. Mi jednak chodzi jak taki układ z diodami ma być połączony i jakich diod użyć żeby działało,bo przemiatanie klawiatury mam opanowane ale niechce jej ciągle skanować.FDodam że robie to na ATmedze8.czy tak może być ?? Widze danielbela że wykorzystujesz atmege 16 więc można tam wykorzystać przerwania PCINT (wywoływane zmianą stanu) więc można wsio...
Witam Programuję swojego Atmegę w AVR studio korzystając z AVR GCC. Mam program, znaleziony na elektrodzie (zamieszczony poniżej). Problem polega na tym za każdym razem kod RC5 z pilota jest odrzucany jako że transmisja jest rzekomo przerywana (zaznaczyłem to miejsce w programie). Gdy miejsce to zahaszuję, program wydaje się działać, tyle że kod RC5...
Witam! Z tego co zauważyłem, a to: '-------------------------obsługa przerwań--------------------------------... '''''''''''''''''''''''sekunda - przerwanie od zegara'''''''''''''''''''''''''' Calasekunda: Cala_sekunda = 1 Stop Timer0 Impp = Tcnt0 Tcnt0 = 0 Start Timer0 Liczba_taktow = Capture1 Capture1 = 0 Return wg. mnie powinno być: '-------------------------obsługa...
Spróbuj zrobić odbieranie w przerwaniu. Albo pomiędzy pętle wstaw jakiś delay, żeby urządzenie końcowe miało czas na odpowiedź. PS. Wywal te klamry zaraz za pętlami, bo na pierwszy rzut oka wygląda to tak że polecenia np. UDR1=ReceivedByte wykonują się w pętli, a one wykonują się tylko raz.
Niestety... Zawsze jednak możesz testować w programie stan PINA.0 np. w przerwaniach z licznika. Albo wymienić układ na ATMega162 i skorzystać z przerwania PCINT0.
Witam, Pracuję na ATmega16 taktowanym wewnętrznym oscylatorem RC. Chciałem wykorzystać Timer1 do odmierzania czasu np. 1s lub 1min (po zastosowaniu preskalera 1024), a Timer2 razem z przerwaniem zewnętrznym do wykonania regulacji fazowej. Kiedy chce tylko odmierzać czas, albo tylko regulować fazowo to wszystko działa poprawnie. Jednak kiedy chcę połączyć...
Tak oczywiscie reset podciagniety. Co ciekawe tak samo jak u kolegi w watku: Waitms uklad rowniez przestaje dzialac prawidlowo Okrojony do minimum program: $crystal = 7372800 $regfile = "m168def.dat" Config Aci = Off Config Lcd = 40 * 2 Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.0 , Db7 = Portb.1 , E = Portb.4 , Rs =...
Witam, Pojawił się ostatnio u mnie taki problem. Otóż odczytuję z przetwornika ADC ATmegi16, z kanału ADC0 wartość napięcia (od 0 do 5VDC). Wyświetlam sobie wynik konwersji na LCD i wszystko ładnie działa (liczba na LCD zmienia się w zakresie od 0 do 1023, jak kręcę potencjometrem). Chciałem sterować tym napięciem podłączonym do ADC0 obrotami silnika...
Mega168 ma w porównaniu do Mega8 znaczne różnice w rozmieszczeniu adresów rejestrów w pamięci (część przeniesiona w obszar ramu) i dziwne że wystarczyła korekta fusebitów, widocznie program prosty. Ja miałem w takim samym przypadku niedawno spore kłopoty, zwłaszcza z obsługą przerwań a też myślałem że powinno ruszyć od razu. Nawet watchdog jest inny,...
przy zwartych rx z tx ( wtyczka na sztywno ) calosc przechodzi bez problemow , tak wiec to nie wina kompa przynajmniej od tej strony - inne urzadzenia np mierniki itd pracuja na nim normalnie po rs , kondensatory itd na pewno sa dobre , napiecie zasilajace caly uklad to pewne 5V z zasilacza laboratoryjnego lub zasilacza od atari , uzywam skretki ekranowanej...
Madergames9 --> rzeczywiście w tym wszystkim może źle doczytałem ale już widzę, że twój problem dotyczy tylko tych przełączników a nie czujników temp. Ok - rzeczywiście do tego celu tranzystor chyba byłby przydatny - tym bardziej, że jednak masz na tej magistrali "parę" tych urządzeń zakładając - że żadne przerwania nie zakłócają ci transmisji po 1wire...
Jeśli ma to być tylko termometr, to obejdzie się nawet bez timerów. Nie ucz się wykonywać poważny kod w przerwaniach. Tam mają być tylko zasygnalizowane pewne działania, np. ustawienie falgi do odczytu czegoś tam, a dopiero kod w funkcji głównej po napotkaniu flagi to robi. Unika się wykonywania zajmującego cykle podprogramu w przerwaniach ze względu...
Bardzo przydatny tryb chociaż nazwa jest myląca. Wg mnie nazwa tego trybu powinna brzmieć "buffered CTC". Piszesz, że mozna bitami migać bezpośrednio - niby jak? PIND.0=1 PIND.0=0 i dalej co? RJMP to 2 cykle i nie pozwoli to na wygenerowanie równego przebiegu prostokatnego, a jak zmienić częstotliwość? wstawić NOPy? A programowo? Użycie przerwania to...
Witam mam kolejny problem z nieszczęsną atmega128. Napisałem program który działał na ATmega16 i chciałem go przenieść do atmega128 no i jest problem. Program w ogóle nie działa. W przerwaniu powinny się zwiększać wartości zmiennych. Niestety chyba nie zwiększają się :/ program wchodzi do przerwania bo wstawiłem tam naprzemienne ustawianie i kasowanie...
Jeśli używasz jakiegoś przerwania wyłącz je na czas transmisji danych pomiędzy uC a Dallasem.
Kontrolę zasilania w moim przypadku zrobiłem tak że zasiliłem uP od baterii z modułu natomiast spadek napięcia zasilania samego modułu monitoruję poptrzez transoptor którego kolektor tranzystora podłączyłem przez rezystor Opodciąganie do Vcc)na wejście INT2, Wyzwala on przerwanie tak zboczem narastającym jak i opadającym i na tej podstawie ustalam załaczenie/właczenie...
Witam. Od dwóch dni walczę ze zrobieniem czytniak rfid. Przeczytałem notkę em4095 i jak dobrze zrozumiałem,w trybie do odczytu (to mnie interesuje) sygnał SHD odpowiada czy układ ma być w trybie uśpienia czy nie (dałem na 0, aby cały czas pracował), sygnał MOD zwieramy do masy (ja dałem zero), RDY/CLK ma dwa zadania - podaje nam sygnał kiedy ktoś zbliżył...
Odbiornik TSOP1736 podłączony do INT0 jeżeli użyję kodu z tematu: układ odczytuje prawidłowo cały przekaz z pilota, problem z tym kodem jest że ciężko znaleźć kiedy przekaz się zakończył i mało zrozumiały. Postanowiłem napisać własny program, i tu się zaczęły problemy. Co jakiś czas uda się odczytać prawidłowo cały przekaz ale większość prób kończy...
Zastanów się. Przecież to co chcesz osiągnąć jest bez sensu - jak procesor ma wykonać obsługę przerwania nie wychodząc z uśpienia? Ma lunatykować? Zrób w przerwaniu co masz do zrobienia i uśpij go ponownie. Te mikrosekundy, które zajmie obsługa przerwania nie obciążą znacząco akumulatora.
Na Atmega162 działam z 1w i przerwaniami do obsługi wyświetlaczy 7seg, transmisji RS i jeszcze jakiegoś timerka. Przerwania wyłączone na czas zapisu/odczytu bitu i nie ma problemu. Wklej może funkcje zapisu/odczytu bitu.
Witam Mam problem z inicjalizacją portu RS232 na Atmedze162, szybkość transmisji 115200. 8, N, 1 oto kod: //Zmienne volatile unsigned char buffers[55]; volatile unsigned char counter=0; const unsigned char frame1[] PROGMEM={0x1E,0X00,0X0C,0X7F,0X00,0... const unsigned char frame11[] PROGMEM={0x1E,0X00,0X0C,0X17,0X00,0...
Spróbuj znaleźć, dokładnie które przerwanie ci przeszkadza. Mnie np przeszkadzało tylko INT0 przy jedoczesnym odczycie RC5 więc na czas wysyłania wyłączałem tylko to przerwanie: Disable Int0 1wreset 1wwrite &H55 1wwrite Dsadres1(1) , 8 1wwrite &HBE Enable Int0 Tempw = 1wread(2) Tempw = Tempw * 10 Tempw = Tempw / 16 Tekst1 = Str(tempw)...
Witam. Mam taki problem. Próbuję skomunikować ze sobą dwa uC. Docelowo będą one skomunikowane po RS485, ale teraz w fazie testów próbuję je połączyć normalnie po UARCie. Skrosowałem TXD i RXD dwóch Atmeg. Wysyłam z Atmega162 znak 0x3A, natomiast na Atmedze32 włącza się przerwanie od odebrania (dioda niezależna od znaku odebranego się zapala ) ale nie...
Schemat: Nie ustawiałem fusebitów, ale mam pewność, że częstotliwość się zgadza, gdyż odliczanie sekundy z przerwania działa idealnie (kod z jednego z programów autora schematu). Co do kodu do UARTa, oczywiście zmieniłem 8 na 12,5. Generalnie na sprzęcie ładnie hula serwer HTTP, klient WWW, obsługa LCD, do pełni szczęścia potrzebuję jeszcze, żeby odpalić...
Tak, 90% moich projektów które wykonuję w oparciu o moduły BTM-222 (a samych modułów tego typu przeszło już kilkaset prze moje łapki i dalej do klientów) są całkowitym zaprzeczeniem tego co tutaj kolega wypisuje. Nie będę już używał słowa, że to są wręcz bzdury - bo może kolega jest początkującym programistą/elektronikiem i stąd takie dziwaczne wnioski....
Zwarcie Vcc do GND pomogło, ale dopiero takie dłuższe zwarcie ( 5 sek). Wyświetlacz ocnkął się, wyświetla dane, ale !!! ciekawostka, zegar stoi. Załaczam kod, taki wprost z Eclipsa, bez bibliotek. Jestem w trakcie przeróbki z innego projektu, proszę o wyrozumiałość. /* * main.c * * Created on: 2010-09-25 * * * PD7 - 1WIRE * PA0..PA7 - LD0..LD7 -...
dondu tak, to dalsza część tamtego. Program niema nic do tego, jeśli pozostawię w programie jedynie piknięcie buzzera (z generatorem) przed pętlą while(1); to też się restartuje, mimo że wyłączone są przerwania. Dlatego stwierdziłem że to problem techniczny a nie software. Chyba problem był w nagłym rozładowaniu tego kondensatora, może jakieś śmieci...
Witajcie! Okroiłem program który napisałem tak aby było widać mój problem. Przed pierwszym użyciem call nie zauważyłem niczego podejrzanego. Bez problemu program powracał z obsługi przerwań, funkcje push i pop także działały. Powrót z procedury kończy się skokiem do ResetProcessor a nie do następnej instrukcji. Nie wiem czemu tak jest. Większość problemów...
Tak, zobacz np. scalak 75176 - to jest transceiver RS485. Ty sterowanie buforów możesz pominąć (sygnąły RE/DE) i je na stąłe otworzyć. Układ wtedy pracuje jako przeźroczysty konwerter pomiędzy procesorami. Wszystko wysyłasz normalnie przez UART. W procesorze odbierającym dane ustawiasz sobie przerwanie RXC i masz odpowiednik tych twoich linii przerwań....
Trochę poczytałem i prosił bym o ewentualną korektę jeśli się mylę: 1. Odnoście ulokowania bootloadera w pamięci. Z tego co wyczytałem w 2. Odnoście podziału pamięci FLASH na RWW i NRWW Istnieje dodatkowy podział pamięci flash na RWW i NRWW (widać to na str. 272), czy dobrze rozumiem że jeśli bootloader ustawie na 512 i sekcja aplikacji powiększy się...
Najprościej to chyba tak: [syntax=c] #include <avr/io.h> #include <avr/interrupt.h> #define TIMERSTART 6 volatile uint8_t FLAGA_50 = 0; volatile uint8_t FLAGA_1000 = 0; // funkcja obslugi przerwania TIMER0_OVF 8MHz / 64 * 250 wychodzi co 2ms // dla innego taktowania nalezy ustawic inny preskaler i/lub inne liczniki stawiania flag ISR(TIMER0_OVF_vect)...
Witam, zaopatrzyłem się w interface pod usb i podłączyłem uC pod komputer, tak jak kolega mówił - nie miało to prawa działać ;] Aktualnie dobrze działa echo przez terminal oraz podłączenie odbiornika GPS pod komputer - wszystkie ramki dobrze odbieram. Niestety nie rozwiązałem problemu z dzielnikiem - muszę łączyć się z układem przy baud 1200, a po dodaniu...
Ale teraz jak mam funkcje do migania diodą co sekundę to znowu miga jak powalona :/ jak sobie tą funkcje umieszcze w while i tam mam ze ma zmieniac co sekunde stan. No to porównaj, to co dołożyłem, z tym co było i dorzuć w swoim programie tak samo odpowiedni plik nagłówkowy na początku oraz <wdt_reset();> na początku pętli głównej, albo wyłącz...
Znaki \r, \n, \" itd. są określone w specyfikacji języka c i jeśli taki znak występuje w stringu ujęty w cudzysłów to kompilator automatycznie zamienia go na daną wartość w kodzie szesnastkowym. Pokaż funkcję usartSendString razem z przerwaniem od Tx (jeśli wysyłasz używając przerwań). Może tam masz błąd. Może nie wysyłasz ostatniego znaku ze stringu...
Zamiast "cyklinować" w tym przypadku wystarczą przerwania od timera i maszyna stanów.
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...
Witam. Pytanie odnośnie kompilatora Bascom AVR. Załóżmy, że w programie wykorzystuję dwa przerwania. Pierwsze pochodzi od nóżki Int0, drugie od przepełenienia Timer 1. Czy (i kiedy) w procedurze przerwania powinienem stosować wyłączanie przerwania na czas jego obsługi? Niby Bascom udostępnia gotowe disable interrupts (wyłącza cały system przerwań) oraz...
Nie musi być while(1) na końcu. Kompilator sam doda pętlę, bo po zakończeniu programu co ma robić? Do OS'a nie wróci. Co prawda przy okazji zablokuje przerwania, ale w powyższym kodzie to bez znaczenia.
Procedura zmiany trybu synchroniczny/asynchroniczny jest zachowana, odczyt rejestrów też jest prawidłowy, gdyż nie wykorzystywane są tryby uśpienia uC. Problem tkwi w tym, że wpisanie wartości do TCNT2, OCR2 i TCCR2 i odczekanie pewnego czasu nie powoduje czyszczenia flag w rejestrze ASSR. Czyli tak na prawdę te wartości nie są ładowane. Do przerwania...