Jeśli wysylasz male porcje danych i rzadko mozesz zastosowac takie roziwazanie. W inym przypadku proponuje wykorzystac przerwania i zrobic jakis buforek nadawczy/odbiorczy.
sorex86 --> nie przesadzajmy, to nie jest jakaś tajemna i wielka znowu wiedza, to raczej podstawy i dlatego o tym piszę, żeby ktoś skorzystał. A jak już jest ta wiedza, to i czasu nie trzeba tyle poświęcać na odpalanie tak prostej rzeczy jak transmisja RS232 i to bez żadnego kwarca zewnętrznego. Bo jak sam widzisz, tutaj problemem nie jest kwarc.
Piszesz DS1820 a czytasz dokumentację DS18B20, a te czujniki różnią się rozdzielczością. DS1820 ma 0,5 stopnia.
Programowo nie da się jej zmienić....... Weź chłopie daj wszystko jak było, tylko BAUD daj 4800 i sprawdź, czy przy takiej prędkości działa #define F_CPU 1000000ul #include <avr/io.h> #include <util/delay.h> #include <avr/signal.h> #define FOSC 1000000 #define CZYT 50 #define BAUD 4800 #define MYUBRR FOSC/16/BAUD-1 void USART_Init(...
Problem w tym, że ta prędkość nie jest do uzyskania na tym kwarcu. Dla UBRR = 6 błąd wynosi ponad 7%. Na moje oko prekompilator wyliczy UBRR = 5 (jak zaokrąglimy wynik działania w dół). Dobierz inny kwarc bo będą na pewno problemy z tą prędkością. Sprawdź z inną niższą prędkością czy działa (4800 dla UBRR=12 - 0,2%ERR). A i jeszcze jedno: można ustawić...
Kolego, delikatna masakra z listingu 1: if(temp2>0) { jeśli temperatura 0 to nie odpowiadamy i atmega wisi? cbi(DDRE, PE2); //sygnał XCK jako wyjście rs0_putch(temp2); //wyślij otrzymane dane i może wypadałoby przestawić XCK spowrotem na weście? z listingu 3: if(tryb<1) { tryb++; if(tryb) {...
A gdzie konfiguracja DDR dla portu B?
Nie wiem czy to aby to ale sprobuj wstawic ';' w petle while(1)
Czyli co, musze zmienić adres w <io/avr.h>? Nie. Tak ma być. Patrz datasheet. Masz błąd w UCSRC |= (1<<URSEL)|(1<<U... Co tam robi 3? powinno być: UCSRC |= (1<<URSEL)|(1<<U... Albo zapisz od razu cały bajt. W twoim przypadku będzie: UCSRC...
0xFF, to brak transmisji, ale 0xC0 świadczy o pewnym przesyle. Było by miło, gdybyś podłączył oscyloskop, bo mogli byśmy wyeliminować błędy transmisji. Połącz RxD z TxD mikrokontrolera i zobacz czy odbierasz to co wysłałeś.
Mega16 będzie działać nawet przy częstot. 20-pare MHz, ale producent nie daje gwarancji, że stabilnie. Domyślam się, że te tabele z UBR są po prostu przedstawione jako uniwersalne dla AVRów, a niektóre z nich mają maks. częstotliwość producenta 20MHz.
Problem leży tu: SIGNAL(USART_RXC_vect) { if(UDR=='$') zapis=1; if((i<14)&&(z... { buf[i]=UDR; i++; } if(i>=14) { k=1; zapis=0; i=0; } } Otóż odczyt z rejestru UDR powoduje jego wyzerowanie a następnie załadowanie następnego odebranego znaku (jeżeli...
1. Jak długie jest połączenie PC-MCU? 2. Jaka jest szybkość transmisji? 3. Czy ATM16 jest taktowana kwarcem? O jakiej częstotliwości? Duża ilość błędów może sugerować niedokoładne dopasowanie szybkości USART po stronie PC i MCU. Przelicz jaki masz błąd.
Tak to jest jak się kopiuje czyjeś programy nie mając o nim zielonego pojęcia, potem zakłada się temat na elektrodzie a ludzie mają rozwiązać problem. Z tego co napisałeś nie wynika nic sensownego, najpierw piszesz, że czujnik nie działa: Mam problem z transmisją temperatury a potem znów, że działa: (działa poprawnie - wyświetla odpowiednią temperaturę)...
Po pierwsze - czy ustawiłeś prawidłowo fusebity, aby procesor pracował na zewnętrznym oscylatorze? Po drugie - w karcie katalogowej jest informacja, że rejestr UBRRH i UCSRR znajdują się pod tym samym adresem, więc instrukcją UCSRC|=_BV(UCSZ1)|_BV(UCSZ0&... wpisujesz tak naprawdę wartość do rejestru UBRRH! Aby wpisać ilość bitów danych...
Hej, Podłączyłem sobie ATmegę16 do komputera przez RS-232 za pośrednictwem MAX232. Na początek chciałbym zrobić echo - to, co wpiszę w minicomie czy putty ma być przesłane do uC i wysłane z powrotem. Wykorzystane mają być przerwania. Problem jest taki, że procedura obsługi przerwania ISR(USART_RXC_vect) jest wykonywana albo bardzo rzadko, albo wręcz...
UBRRL=0x33; UBRRH=0; //ustawienie prędkości transmisji dla 9600 bps Mnie tam sie to nie podoba za bardzo ;>
Nie odpowiedziałeś na moje pytanie - skąd wiesz, że się nie ustawiają ?
Czemu nie spróbować USART?
Witam, szukam już od dłuższego czasu programu do odbioru i nadawania znaków na atmege16 do WINAVR w języku C, ale wszystko co znajduje to albo nie działa albo widać nie jest dostosowane tylko odbioru (np. stosowane są sbi, a WINAVR tego nie zna). Czy ktoś mógłby skrobnąć kod wzorcowy, nawet dla potomnych, żeby od razu zadziałał na ATMEGA16 z rezonatorem...
Witam, w jaki sposób przesyłać cały łańcuch, a nie żeby był rozbity na litery(różnicę widać na snifferach i w moim tunerze sat, który w taki sposób nie chce działać)? moje ustawienia i procedury: // inicjacja UASART USART_Init: ; Ustawianie predkosci ldi R16,high(MYUBRR) out UBRRH, R16 ldi R16,low(MYUBRR) out UBRRL, R16 ; Walczenie...
Ja właśnie myślę, że nie trafiłeś z prędkością transmisji. Być może wszystko inne jest okej. *) W dokumentacji HC-05 piszą o dwóch prędkościach domyslnych - to jest 9600 i 38400 - w Twoim przypadku ustawiłeś sobie bez skonfigurowania moduł na 19200. Tak BTW - jaki masz kwarc? Z jaką częstotliwością skonfigurowałeś Atmegę? *) Czy na pewno procedura inicjacji...
Witam forumowiczów, Sytuacja wygląda tak, że z jednostki nadrzędnej słane są ramki danych, Po każdej ramce jest szczelina czasowa tak aby nasza ATmega zdążyła odpowiedzieć, Mamy Atmega16 kwarc 16MHz i transmisje 57600 (w przybliżeniu), Gadamy przez RS485 tak, że między ramkami jeszcze przełączam linie bufora, Steruje równocześnie buforem wejścia i wyjścia...
USART atmega16 posiada podwójny buffor odbiorczy ("two Buffer Registers operate as a circular FIFO buffer") oraz pojedynczy rejestr odbiorczy przesuwny ("receiver Shift Register can now act as a third buffer level"). W każdym rejestrze mieści się jeden bajt więc w układzie można przetrzymać 3 odebrane bajty.
Zauważ że po tym waitms 100 masz jeszcze zapisywanie daty i godziny do DSa. To też troszkę trwa. Spróbuj dać to wyświetlanie zaraz przed DO. Ogólnie program wygląda ok, sam korzytam z tych komend :) , ale bez udziału zewnętrznych bibliotek. No i jeszcze jedna mała uwaga. Jeśli nie używasz USARTa to wyrzuć komendę $baud, żebyś się potem nie dziwił że...
Witam. W kodzie przydałaby się inicjalizacja USART'a; jakieś baudy do transmisji, włączenie USART'a.
Ustawiłem w terminalu na PC baud 300 i o dziwo odbieram 0F - czyli to co wysyłam. Nie wiem tylko gdzie mam błąd skora w uP ustawiłem na 2400. Fuse bity też chyba ok. Dodano po 33 Już wiem co było źle. Po prostu wcześniej korzystałem z USARTa synchronicznego w którym inaczej oblicza się baud rate (Fosc=baud/2(UBRR-1)), a w asynchronicznym jest zamiast...
Witam! próbuje przesłać dane z komputera, na atmege i wyświetlić je binarne na LCD. Problem tkwi w tym że wyświetlane dane nie zgadzają się z tym co wysłałem z PC. Używam Atmegi 16 na kwarcu 16 Mhz.Oto kody programów od strony PC i Atmegi: PC using ... namespace RS232 { public partial class Form1 : Form { public Form1() {...
Dzieki bardzo - bede probowal :)
Przerwania co 4ms nie powinny mieć wpływu na ICP, na OW też nie, bo sekcje krytyczne czasowo zamykasz w bloki atomowe (cli/sei). Jedyne co się może stać to nieznaczne opóźnienie reakcji na przerwanie spowodowane jego blokowaniem. Jeśli jednak przerabiasz płytkę to pomyśl o tym wykorzystaniu USART.
Wyświetlacz jest z allegro sprzedający nic o nim nie wie zamiast 5v podałem 12v i kursor mruga w pierwszym znaku pierwszej lini ale nic na nim nie mogę wyświetlić próbuje sterować przez USART z atmega16 ale nic z tego czy ten układ ADM232 może przeszkadzać jeżeli stany so na poziomie TTL?
Wystarczy ATmega8 + ENC28J60, ale optymalnie ze względu na ilość portów ATmega16 + ENC28J60. Do tego jeszcze stos uIP, parę dni i sprawa załatwiona.
RS485 lub 1-wire (zakładam że odległości będą kilku metrowe)
Wydaje mi się , że funkcja wysyłająca znak na LCD jest zbyt czasochłonna i poprostu gubisz część znaków wysłanych przez telefon.Spróbuj zapisać je do tablicy , a potem wyświetlić na LCD , pamiętając o pominięciu znaków o kodach < niż np. 0x20.Najpewniejszym wyjściem z sytuacji , jest jednak bufor FIFO , zaimplementowany w procedurze obsługi przerwania...
Witajcie, Mam problem z komunikacją przez RS232, korzystam z przejściówki USB-RS232: http://www.recursion.jp/avrcdc/ , kit do samodzielnego montażu z AVT. Zainstalowałem najnowsze sterowniki i wgrałem najnowszy firmware do ATtiny2313 na przejściówce, jednak problem jest cały czas ten sam, nie jestem w stanie uzyskać prawidłowego echa, mikrokontroler...
Witam, Zastanawiam się, jak zrealizować komunikację o takim schemacie: PC (RS232) <-> Atmega16 <-> 3x Attiny2313 USART? Ale czy nie będzie problemu z obsługą 3 urządzeń przez Megę? Zależy mi na małych opóźnieniach w komunikacji Mega <-> 3xtiny, a nigdy nie programowałem czegoś takiego. Pozdrawiam.
Sprawdź, podokładaj kondensatory to wyeliminujesz przynajmniej jedną przyczynę.
przecież pokazana funkcja USART_ReceiveByte czeka do skutku aż bajt zostanie odebrany, więc delay w niczym nie przeszkodzi. Tym niemniej jest szansa na zgubienie danych.
Specyfikacja RS232 nie dopuszcza dwóch urządzeń podłączonych jednocześnie do tego samego portu. Musiałbyś stworzyć specjalny protokół i dostosować odpowiednio układy. Proponowałbym przejść na RS-485/RS-422. Wystarczy podłączyć do USART układ SN75176B lub MAX485 i możesz wykorzystywać do 32 urządzeń. http://obrazki.elektroda.pl/7530139300_1...
spróbuj z AVRLIB http://www.mil.ufl.edu/~chrisarnold/comp... to zestaw bardzo wielu gotowych rozwiązań dla AVR na stronie www.societyofrobots.com masz tutoriale jak odpalic usart przy pomocy AVRLIB
Build started 6.4.2014 at 00:25:04 avr-gcc -mmcu=atmega16 -Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT Proba_10.o -MF dep/Proba_10.o.d -c ../Proba_10.c avr-gcc -mmcu=atmega16 -Wl,-Map=Proba_10.map Proba_10.o -o Proba_10.elf avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature...
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...
Oj, przejrzałem pobieżnie kod - uwierz mi - skasuj go. W C jest coś takiego jak funkcje - wykorzystaj to, kod, który masz jest kompletnie nieczytelny. Każdy normalny promotor by to coś uwalił chociażby za to. Co do szybkości działania - pokaż kod funkcji odpowiedzialnych za komunikację z czujnikami. Z kodu, który masz: - funkcjie piszące do LCD są zapewne...
Witam, Mam następujący problem. Podłączyłem telefon komórkowy siemens M50 do uprocesora atmega16. Usart został ustawiony na prędkość 9600: #define MYUBRR 103 void USART_Init( unsigned int ubrr) { UBRRH = (unsigned char)(ubrr>>8); UBRRL = (unsigned char)ubrr; UCSRB = _BV(RXCIE)|_BV(RXEN)|_BV...
jeśli chodzi o przerwania korzystaj z SIGNAL a nie ISR (a dlaczego? to już sobie sam doczytaj) Wycinek z <avr/interrupt.h> z najnowszego AVR-GCC #if defined(__DOXYGEN__) /** \def SIGNAL(vector) \ingroup avr_interrupts \code #include <avr/interrupt.h> \endcode Introduces an interrupt handler function that runs with global...
Witam, programuje atmege162, kwarc 14,5674Mhz. programuje w c, avrStudio4.17. Programator AvrProg z firmy And-tech. Oba uarty ustawiłem tak samo, zmianiając tylko numerr uarta. Do uartów mam podłączonego maxa232. Sprawdzałem połączenia zmieniając wyprowadzenia i efekt był taki sam, mianowicie z uart1 atmega wysyła krzaki, a uart0 działa i na terminalu(używam...
Witam!! Od dosyć długiego czasu mam problem z resetowaniem się Atmegi644P podczas odbierania większej ilości danych a USART-a. Problem się powtarza przy każdej prędkości transmisji. Używając w podobny sposób Atmega16 nie miałem tego typu problemów. void uart_init(int baud) { UCSR0B|=_BV(RXCIE0)|_BV(RXEN...
Nie wystarczy Ci naprzykład ATtiny26 ? Usart ma naperwno a I2C chyba też. A jak nie to ATmega16 ma i jedno i drugie napewno. I cały sprzęt masz gotowy.
Nota katalogowa -> zakładka USART -> Examples of Baud Rate Setting i juz wszystko jasne ;)
Ale to: [syntax=c]int main(void){ MYUBRR = 25; //baud rate = 2400 USART_Init( MYUBRR ); USART_Transmit(USART_Receive()); //wyślij odebrany bajt }[/syntax] nie działa tak jak zakładasz. To się wykona raz po czym procesor wejdzie w martwą pętlę. Ostatnią linię trzeba więc zapętlić. Druga sprawa - jeśli odbierasz śmieci to znaczy, że masz źle ustawione...
Rozwiązanie było proste! Wystarczyło dopisać sei(); w funkcji obsługującej przerwanie USART Ciekawe jak sprawa będzie wyglądać gdy podłącze drugi enkoder (po potrzebuje dwóch)?
Dużego zasięgu nie potrzebuje. Czyli wystarczy skonfigurować UARTa np http://mikrokontroler.info/usart-w-mikro... i to co będzie w rejestrze UDR zostanie wysłane.
Spakuj załącznik czymś normalniejszym niż rar. A problem leży zapewne w częstotliwości - 1 MHz to za mało dla większości "bibliotek" OW. Przy tym taktowaniu jedna instrukcja to co najmniej 1 us - czyli długo i zaczyna się wszystko rozjeżdżać. Najpierw więc sprawdź czy to działa dla taktowania 8 MHz. Jeśli używasz 1 MHz to najprościej jest użyć USART...
Sorka :) troszke zaspany byłem Tak To ATmega16 a jeśli byś mógł Mi jeszcze powiedziec jak się wysyła ten 9bit ?? W Język C
Może zanim zapomnę o czym chciałem napisać a nie jest najważniejsze, ale dla Ciebie ważne. Tak w telegraficznym skrócie -> USART w AVR ma możliwość włączenia jakby podwójnej prędkości/próbkowania (to samo SPI). Bit ma skrótowa nazwę U2X. Przy taktowaniu 16MHz, jak prawie każda płyta Ardu, to bez U2X predkość 115200 miałaby za duzy błąd który niby maksem...
Jedyny wymóg dla Tx to taki że pin musi być skonfigurowany jako wyjście. Jeśli w dalszej części programu nie zmieniasz go przypadkiem na wejście to musi działać. Tak się składa że mam Atmegę 162 i nie zauważyłem żadnych problemów z poprawnym działaniem obu USARTów. Zastanawia mnie samo wyjście Portu PD1 które jest w stanie niskim mimo programowego ustawienia...
Tu masz schemat porządnego konwerterka - użyj scalaka w wersji HCT czyli 74HCT14 . Oczywiście konwerter to tylko te bramki http://obrazki.elektroda.net/96_12610663... to na 100% działa z tym siemensikiem ;)
Moim zdaniem jest prostsza metoda. Tworzy się dwa indeksy i tablice buforującą. Oprogramowanie zapisuje znaki to bufora i zwiększa pierwszy indeks (umownie indeks programowy). Po takim zapisie przed wyjściem zezwala na przerwanie. Przerwanie z kolei jak wykryje, że bufor programowy jest różny od drugiego buforu (umownie bufor sprzętowy) to z aktualnie...
Witam wszystkich. Chciałem napisać program który odbierze znak po rs232 i go odeśle. Kod pochodzi z datasheeta atmegi16. Port w komputerze jest dobrze skonfigurowany. Do komunikacji używam terminala v1.8. Atmega niestety nie odpowiada. #include <avr/io.h> #define F_CPU 8000000L // zegar w Hz #define RS_BAUD 4800 #define RS_UBRR F_CPU / 16 / RS_BAUD...
Tak, lecz jest to sytuacja, którą opisałem w poście #3. Z drugiej strony, ja bym przedstawiony przez ciebie problem rozwiązał inaczej - w dwóch przerwaniach. W przedstawionej sytuacji wysyłkę można zrobić całkowicie w oparciu o przerwania USART, a timer niech robi to do czego służy :) A jakieś inne różnice?
Odjąć 48!!! Tylko że już to przerabiałem, ale może coś źle robiłem.Mógłbyś mi wskazać miejsce gdzie to wpisać? A może jest jakiś mądrzejszy sposób? Program miał działać tak ale się zaciąłem: 1. Na LCD nic albo 0 //działa 2. W terminalu jakiś tekst powitalny //jest, ok 3. Wpisuje cyfrę i wyświetlona zostaje ona na LCD //nie działa 4. Cyfra poddana jakiejś...
Witam ponownie, dzięki za pomoc, udało się program skompilować i nawet wszystko działa. Jednak jedynie na symulatorze, mam problem z przeniesieniem tego na procesor. Po uruchomieniu procesor przesyła jedynie powitanie: "FatFs R0.07d test monitor for AVR\n", natomiast na każdą próbę wysłania komendy odpowiada jedynie echem i nie wykonuje żadnych operacji....
Witam kolegów, mam dość dziwny kłopot. Poniższy program zawiera jedynie procedury służące do komunikacji Atmega16 z PC. Jest tu obsługa wejściowego i wyjsciowego bufora kołowego o pojemności 255znaków. Pętla główna jest w zasadzie pusta. W celu przetestowania każdy przychodzacy znak jest dodawany do bufora wyjściowego i odsyłany (echo). Program testuje...
Posłuchaj ;) ... ja ci proponuję - odpuść sobie to myślenie o CKDIV8. Tzn wyłącz ten Fusebit i przestań o nim myśleć za to staraj się doprowadzić do prawidłowej transmisji wg PDF'a procka. Ty masz wciąż podstawowe problemy z inicjalizacją i przez to masz krzaczki/ptaszki - a to że raz widać jakieś literki a innym razem nie - nie ma nic wspólnego że...
Nie, nie mam. Dodano po 22 W kodzie na temat USART'a, trochę namieszałeś. ATmega128 ma 2 USART'y. W jednym miejscu konfigurujesz USART1 a w innym używasz USART0. Polecam datasheet'a do ATmegi128, są tam też przykładowe kody dot. USART'a.
Kolego zaczynasz ponownie wymyślać rower ( to taki slang o wynalazcach wtórnych ) Ups on-line( duże upsy powyże 1000VA APC,Fiskars,Orvaldi,PowerWare - stale pracujaca przetwornica, napięcie na wyjściu z przetewornicy, buforowo zasilanej z sieci przez prostownik z akumulatorem, system bez przejścia w przypadku zaniku napięcia, drogi. of-line ( wszystkie...
Program ma wysyłać "powitanie" na port szeregowy. Kompilowany przy pomocy Winavr + avr studio(w najnowszych dostępnych wersjach). Bez optymalizacji wysyła "Witam" ale tylko raz, a powinien dwa razy. Po włączeniu optymalizacji nie wysyła nic. Gdy robiłem transmisję przez polling wszystko było ok. Przerwanie włącza makro TXON; . Dzięki Plik iom16.h /*...
Nie patrz na to co ci przez przypadek działa, tylko na to co jest napisane w notach. Przy informacjach na temat generatora RC łatwo znajdziesz jego stabilność, a z tego już łatwo policzyć o ile muszą się zmienić warunki (zasilanie, temperatura), żeby to nie działało. Ergo, problemem nie jest to, że jedna ATMega działa z zegarem 8, a druga 16 MHz, tylko...
Jak czytałeś lub nie :) karta ma sekwencje "startu" , nie pamiętam teraz jaki ma format, jest to jakiś 5bit znak, ja najpierw z czytuje cały bitstream od czytnika i potem funkcją szukam startu jak nie znajdę to "przekręcam" bufor (znaczy ostatni bit staje się pierwszym w strumieniu) i jeszcze raz szukam znaku startu, potem już tylko na podstawie tablicy...
Witam, mam taki problem. Otóż mam połączoną Atmegę162 z modułem Bluetooth BTM112. Połączone jest wszystko dobrze, gdyż komunikacja mi działa na programiku z użyciem SIGNAL(SIG_USART0_RECV) . Próbuję to przerobić na ISR(USART0_RXC_vect) jednak nie chce mi to zadziałać. Mam zamiar odebrać to co BTM wysyła od razu po nawiązaniu połączenia tzn "CONNECT...
Tak, udało mi się go uruchomić. Po prostu nie dałem max'a232 do konwersji RS na TTL... Myślałem, że taką konwersję realizuje właśnie sprzętowy USART w atmega... Mój błąd. Udało mi się mój egzemplarz skonfigurować na prędkość 9600bps. Kiedy chciałem wycisnąć z niego więcej była kiszka niestety. Może tobie się uda osiągnąć lepsze rezultaty. Powodzenia
Witam W załączniku bootloader z programem na PC. Obecnie obsługuje ATMega8 (sprawdzone), ATMega16, ATMega32 i ATMega64 Aby go wykorzystać należy pozmieniać w pliku bootloader.asm ustawienia dotyczące zegara, dla wewnętrznego oscylatora wskazane jest wpisanie bajtu kalibracji, portu USART itp, oraz przekompilować go i wgrać. Trzeba uruchomić program,...
Nie wiem czy będzie w PDF'ie od tej ATMegi, ale naprzykład w PDF'ie do ATMEGA8 są przykłady w asm i w C obsługi USART'u - tam poszukaj.
Nie da się na to pytanie odpowiedzieć nie widząc kodu. USART obsługujesz w przerwaniach? Pamiętaj, że na czs jego wykonania inne przerwania są blokowane, użycie nieblokujących handlerów przerwań wymaga głębszej analizy. Ale generalnie spójrz na to w ten sposób - procesor przez 40% czasu się nudzi. Więc dla 16MHz masz sytuację taką, jakbyś miał cały...
Nie wiem dokładnie co robie źle. Ale mam brak komunikacji. Pewnie chodzi tu o te porty, ale ja za bardzo nie wiem jak je zainicjować. Jeszcze raz proszę o wszelkie porady. Pozdrawiam Chyba zapomniałeś wywołać w MAIN funkcji UART_init() . Odpowiednią wartość argumentu, jaką trzeba podać funkcji znajdziesz w Datasheecie ATmegi, w dziale przykładowych...
W zasadzie to tyle : #include <stdint.h> #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> volatile uint8_t c; ISR(USART0_RX_vect) { uint8_t c; c=UDR0; loop_until_bit_is_set(UCSR0A,UDRE0... UDR0 = c; } ISR(USART1_RX_vect) { uint8_t c; c=UDR1; loop_until_bit_is_set(UCSR1A,UDRE1...
Ale czy ja niejasno napisałem? mega 16 nie ma rejestru UCR. a jeśli chodzi ci o UDR to takie działanie jest zupełnie bez sensu.
Skoro masz w ukłądzie kwarc 32768 Hz to tykorzystaj go do kalibracji programowej generatora RC, lub prościej do wyliczenia rzeczywistej wartości częstotliwości RC, na podstawie której określasz baudrate USART. A skoro to ma być energooszczędny zegarek to weź XMEGA np. E5, która raz, że może działać z USART bez kwarcu, dwa, ma stabilny generator 1kHz...
No teorię to ja mniej więcej znam... tylko jak to zamienić na kod. Coś takiego? #include <avr/io.h> #include <stdlib.h> #include <avr/interrupt.h> #include <avr/signal.h> ///////////////////// USART////////////////////////// #define FOSC 16000000// Clock Speed #define BAUD 4800 #define MYUBRR FOSC/16/BAUD-1 ////////////////////////////////////////...
http://obrazki.elektroda.pl/5302716200_1... Witam! Chciałbym wam przedstawić mojego drugiego robota klasy linefollower. Teraz jest on na trochę większym poziomie niż Wolverine. Ogólnie koncepcja nowego robota powstała po zawodach T-Bot, na których zobaczyłem po raz pierwszy robota Botland Teamu. Decyzja padła szybko i była jednoznaczna....
Hej niestety oprócz tego, że bit USART Transmit Complete w UCSRA jest ustawiony, to nic to nie dało. Nadal nic nie otrzymuje na rsie, ściągnąłem sobie jakiś super podgląd rs'a i widzę, że tylko linia txd (w pececie) mi chodzi. pzdr
Wewnętrzny oscylator można pięknie sobie wykalibrować, szczególnie pod kątem właśnie transmisji RS232. Służy to tego jeden bajt, którego wartość można odczytać a potem zmieniać (w górę lub w dół) i sprawdzać jak się zachowuje transmisja RS232. Gdy się złapie jego odpowiednią wartość (taką "po środku") - to można przy starcie programu ją zawsze ładować...
Witam wszystkich, Mam taki układ: ATmega16L taktowana kwarcem 8MHz, do tego podłączony jest układ L9637D do komunikacji z samochodem. Dodatkowo nóżka RXD procesora jest podciągnięta rezystorem 330Ohm do +5V (zasilanie). Bez tego rezystora w ogóle nie udało się połączyć z komputerem samochodu. Okazało się, ze teraz (temp +5C) nie ma komunikacji... sprawdzałem...
https://obrazki.elektroda.pl/5870115600_... Jest to uniwersalny dekoder pilotów na podczerwień, który obsługuje 42 protokoły transmisji IR (Infra-Red). Umożliwia ustalenie nazwy protokołu oraz wartości adresu i rozkazu, wysyłanego przez testowany pilot po naciśnięciu danego przycisku. Wszystkie informacje są prezentowane na wyświetlaczu...
Kod nie jest przenośny nawet po: ISR( USART_RXC_vect )
"I2C_wyslij" przyjmuje u char, ale co z tego ? Po I2C i tak można jednorazowo wysłać tylko 8 bitów. Stąd u char. 24LC16 zajmuje osiem adresów na szynie I2C dla wysyłki i tyle samo do odczytu (na każdy blok). Do pracy z tą pamięcią potrzeba 11 bitów. Trzy starsze bity idą razem z adresem kostki. Osiem młodszych bitów idzie zaraz potem. Adres jest odpowiednio...
Witam kod do nadajnika może wyglądać tak: #include <avr/io.h> #define F_CPU 1000000UL #include <util/delay.h> #include <avr/interrupt.h> //set desired baud rate #define BAUDRATE 1200 //calculate UBRR value #define UBRRVAL ((F_CPU/(BAUDRATE*16UL)&... //define receive parameters #define SYNC 0XAA// synchro signal...
Co do while - nieskończona pętla musi zostać. Teraz po wykonaniu USART_transmit program idzie w maliny. Wcześniej natomiast USART_transmit wywoływałeś w nieskończoność. A co do samego wysyłania to pewnie masz coś pokręcone z zegarem i/lub wartościami UBRR. Później Ci to sprawdzę. Ok. Same funkcje uarta są ok dla obu procków. Zwróć uwagę, na jakim zegarze...
Ciągle walcząc z tym BTMem doszedłem do czegoś takiego że mam taki programik: [syntax=c] while(1){ USART_Flush(); _delay_ms(200); i=USART_Receive2(); _delay_ms(200); liczba= (int)i; if(liczba==117) Hello3(); if(liczba==115) Hello4(); liczba=0; i='0'; //if(stan==1){ //czyBylRuch(); //} //uart_putc('2'); //_delay_ms(10000); }[/syntax] i tak jak naciskam...
.. 16000000/1024/15/4 = 260 FPS so will be fine, no flickering. The system will shine a little faster than mine. In the code you just change the line # define FOSC 14745600 The value of BAUD and MYUBRR can be or can be removed because they are for communication or RS232 USART and I do not use it. Yours Dodano po 16 I hope I get it right.. [syntax=c]//...
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...
No dobrze, nie byłem zbyt precyzyjny, mea culpa. SS tak, bo w masterze SS nie jest de facto obsługiwane przez sprzęt. Tak, mogłem o tym napisać. Jeżeli chodzi o USART, to jednak nie masz racji: • TXD – Port D, Bit 1 TXD, Transmit Data (Data output pin for the USART). When the USART Transmitter is enabled, this pin is configured as an output...
Pomyłka. Sprawdzać trzeba nie UDRE, ale TXC. W dodatku trzeba go kasować programowo, jeśli nie używasz przerwania Od TXC. Spróbuj tak: unsigned char USART_Receive( void ) { while ( !( UCSRA & (1<<TXC)) ); UCSRA = 0x40; while ( !(UCSRA & (1<<RXC)) ); return UDR; }
Poza sprzętowym uartem masz jeszcze możliwość użycia programowego uarta , możesz też użyć modułu BT z interfejsem SPI . albo użyć mikrokontroler który ma dwa układy uart np. ATMEGA162 . Jest sporo układów posiadających więcej niż 1 uart możesz je szybko znaleźć na stronie atmela używając selektora
Problem już prawie rozwiązany, gdyż moja lista z projektami świeciła się jak choinka za sprawą tych samych, złych bibliotek. Poprawiłem już prawie wszystko, ale chce się upewnić co do jednego. Czy w kodzie który zamieszczam wystarczy usunąć "||" czy coś tam powinno być? W pliku źródłowym na jakiejś stronie internetowej też tego nie ma, więc nie usunąłem...
No właśnie takiego czekania w pętli chciałem uniknąć. Tą funkcję spełnia przerwanie: Zła nazwa przerwania, powinno być USART_UDRE_vect: http://www.nongnu.org/avr-libc/user-manu... Naprawdę nie było żadnych ostrzeżeń przy kompilacji ? No własnie też taką dałem nazwe przerwania i wtedy wywalało mi błędy przy kompilacji. Więc...
Poczytaj o FDEV_SETUP_STREAM np. (jeszcze) tutaj: http://www.appelsiini.net/2011/simple-us... W definicji twojego strumienia (w przykładzie - który ci podałem) brak jest funkcji pobierającej znak ze strumienia. Funkcję zdeklaruj wg podanych przykładów i przypisz jako drugi parametr tego makra (obecnie NULL). Natomiast trzeci parametr przestaw...
Witam Mam taki problem. Grzebiąc po archiwach elektrody znalazłem gotowe funkcje do inicjalizacji USART i transmisji danych. Niestety, w HyperTerminalu wyskakują mi "śmieci" zamiast tego, co chciałem przesłać. Domyślam się, że może być problem z dobraniem argumentów przy inicjalizacji. Dodam, że komunikacja odbywa się prawidłowo, gdy piszę w Bascomie,...
A zrób prosty test i w pętli głównej daj tak: [syntax=cpp] while (1) { if (flaga){ wyswietl(USART_Receive(),1,1); flaga=0; } } [/syntax]
Ja nie widzę problemu w izolacji 1WIRE, trzeba użyć 2 szybkich transoptorów (np. 6N137) i 2 linii mikrokontrolera - osobnych do nadawania i odbioru. Można wykorzystać USART, co dodatkowo uprości obsługę magistrali od strony programowej. Oczywiście dodatkowo potrzebna będzie izolowana przetworniczka DC/DC do zasilania czujników i elektroniki za transoptorami....
atmega16 usart atmega16 przerwania usart usart atmega16 przerwanie
zwarcie pompie paliwa peugeot telewizor samsung mrugać philips opinie
ogranicznik prądu płyta indukcyjna
Instrukcja obsługi Vaillant turboMAX plus VU L 152/2-5 Jak zresetować kocioł gazowy Beretta Ciao AT?