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) {...
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ś.
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...
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...
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...
A gdzie konfiguracja DDR dla portu B?
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.
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.
1/ jak kolwiek brakuje Ci w kodzie wywolania usart_init() 2/ brakuje tez brakuje zalaczenia przerwan: asm volatile("sei"::... 3/ kolejna sprawa, to ze niewiem, czy zmienna "events" jest z atrybutem volatile - jesli nie, to: while(!events) { }; skompiluje sie do czegos takiego: if(!events) while(1)...
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...
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...
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() {...
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...
Nie odpowiedziałeś na moje pytanie - skąd wiesz, że się nie ustawiają ?
Jeszcze jedna sprawa... Zmienna zliczanie jest typu unsigned char więc ok... Ale jak ją odbierasz...? Jeżeli terminal odbiera wszystko jako ascii to wyskakują krzaki bo traktuje to co wysyłasz jako kody znaków ascii... Np. kropka to 46... Więc albo odbieraj jako liczbę albo przed wysłaniem zamieniaj liczbę na ciąg znaków i tak puszczaj...
Mam problem z transmisją temperatury (sczytanej przez czujnik DS18S20) za pośrednictwem USART. Jestem dopiero początkująca w tej dziedzinie wiec proszę o jasne wytłumaczenie ja zrobić aby było dobrze lub o poprawienie niniejszego kodu: inicjalizacja USART'u: // inicjalizacja usartu void usart_Init(unsigned int UBRR) { UBRRH = (unsigned char)(UBRR>>8);...
RS485 lub 1-wire (zakładam że odległości będą kilku metrowe)
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...
Czemu nie spróbować USART?
Nie wiem czy to aby to ale sprobuj wstawic ';' w petle while(1)
UBRRL=0x33; UBRRH=0; //ustawienie prędkości transmisji dla 9600 bps Mnie tam sie to nie podoba za bardzo ;>
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...
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.
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.
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...
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. W kodzie przydałaby się inicjalizacja USART'a; jakieś baudy do transmisji, włączenie USART'a.
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...
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...
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...
Sprawdź, podokładaj kondensatory to wyeliminujesz przynajmniej jedną przyczynę.
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?
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...
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
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...
Nie masz funkcji obsługi przerwania od usartu, przez co po wystąpieniu przerwania procesor się resetuje. Brak funkcji obsługi wynika ze złej nazwy: jest SIG_UART0_RECV a powinno być SIG_USART0_RECV (lub USART0_RXC_vect). Warto czasem zobaczyć co w iom162.h siedzi.
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...
Tak, jeśli używasz przerwania to nie potrzebujesz tej funkcji. Procesor wcale nie musi się resetować, może wpadać w nieokreśloną martwą pętlę po skoczeniu do przerwania od RX (które jest nieokreślone). Program działa więc tak: wykonuje wszystko aż do napotkania funkcji USART_ReceiveByte, wchodzi do niej i oczekuje na zakończenie odbioru bajtu przez...
Dodano po 1 Dobra... Chyba mam źródło problemu... Chyba wina Windowsa, zaniosłem wszystko do kumpla, on ma se7en 64bit, ja 32... Po zaprogramowaniu u Niego działa wsio elegancko, u mnie nie... Winda aż tak krzaczy? :O
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...
Nota katalogowa -> zakładka USART -> Examples of Baud Rate Setting i juz wszystko jasne ;)
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
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)?
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.
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...
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...
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...
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.
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...
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...
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...
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...
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?
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.
Witam, Teraz będzie działało: #include <avr/io.h> #define USART_BAUDRATE 9600 #define BAUD_PRESCALE ((F_CPU / (USART_BAUDRATE * 2)) - 1) int main (void) { char ReceivedByte; UBRR1L = BAUD_PRESCALE; UBRR1H = (BAUD_PRESCALE >> 8); UCSR1B |= (1 << RXEN1) | (1 << TXEN1);...
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...
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ś...
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 pod mega8, zegar 3.6864MHz; należy zamienić litery >>x<< numerem telefonu. Komunikat: hello hello czy jakoś tak.. właśnie - upewnij się, czy wysłanie komunikatów do PC-ta via max232 idzie bez zakłóceń.. Układ jest prosty, więc to jakieś drobne przeoczenie jest przyczyną problemów.. #define PRINT(x) usart_puts(x) #define...
Witam :) Od kilku dniu usiłuje odpalić bibliotekę FATfs ze strony #include <avr/io.h> #include <avr/pgmspace.h> #include <avr/interrupt.h> #include <string.h> #include "xitoa.h" #include "ff.h" #include "diskio.h" #include "integer.h" #include "usart.h" #define BAUD 9600 #define...
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...
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...
Ojej... rzeczywiście strasznie głupi błąd. Po prawdzie kod był pisany na szybko i nawet nie przyszło mi do głowy że to może być wina umieszczenia całej funkcji w przerwaniu. Dzięki wielkie Panowie :D. Wrzucam kod, być może komuś się kiedyś przyda. [syntax=c]#include <avr/io.h> #define F_CPU 16000000 #include <util/delay.h> #include <avr/interrupt.h>...
Coś mi całą ta transmisja nie działa... procesor atmega16, makieta 300-k. Ktoś widzi błąd? / główny moduł projektu // pliki dołączone ( include ) : #include <avr/io.h> // funkcje : void USART_Init( unsigned int ) ; void USART_Transmit( unsigned char); //=================== int main(void) { USART_Init(51);//prędkość 9600 przy 8MHz while(1) { USART_Transmit(0x30);...
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, 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.
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...
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...
jeśli macie tego typu znaczki: řţř to najprawdopodobniej macie źle ustawioną prędkość w btm, u mnie nie wiem jakim cudem była na 9600 a ja cały czas próbowałem na domyślnej 19200. teraz mam taki problem, napisałem poniższy kod na ATmega168 z kwarcem 20 MHz. http://obrazki.elektroda.pl/5665484900_1... ale jak wepnę moduł VGJ elektronika z btm-222,...
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...
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...
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 /*...
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ć...
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...
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.
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
Poniżej inicjalizacja UARTu, funkcja wysyłająca i minimalny kod który chciałbym uruchomić w najprostszej wersji. [syntax=c]void initUart0() { PORTB |= (1 << PORTB2); DDRB &= ((0 << DDB4) | (0 << DDB3)); MCUCR |= (1 << SFIOR); /* Ustaw prędkość transmisji */ UBRR0H = (BAUD_PRESCALE0 >> 8); UBRR0L = BAUD_PRESCALE0; /*...
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,...
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...
1. Nie stosuj niestandardowego połączenia pinów w gnieździe programowania, bo gdy podłączysz programator zgodny z ISP z włączonym zasilaniem układu programowanego, to będzie buuuuuum: http://mikrokontrolery.blogspot.com/2011... 2. Coś pomieszałeś ten układ resetu. Rezystor 330 przy kondensatorze ma ograniczać prąd jego rozładowania...
Ok, uporałem się jakoś z tym projektem, tak że wreszcie działa. W końcu użyłem tego gotowego przykładu: http://mikrokontrolery.blogspot.com/2011... i jakoś "ręcznie" dodałem biblioteki ASF od TWI. Było kilka niezgodności, ale się z tym uporałem. Tak więc program działa i wymienia dane z kompem. Mam...
"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...
Po tej zmianie zrobiłeś bardzo niebezpieczny algorytm polegający na czekaniu w przerwaniu na odbiór znaku z USART. Zdefiniowałeś funkcję USART_Receive() z while() w środku i używasz jej nawet 2 razy pod rząd w przerwaniu. To zaprzeczenie istoty przerwań i potencjalne miejsce powstawania błędów. Mam propozycję. Narysuj algorytm tego co chcesz osiągnąć,...
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 Próbuję odebrać na komputerze (w programie bray terminal) dane, tzn. konkretnie temperaturę z termometru LM35. Niestety mam problem z odbiorem danych w przerwaniu od UART-u. Poniżej przedstawiam kod programu: [syntax=c] /* Wysyłanie do komputera wartości temperatury interfejsem USART mikrokontrolera */ /* LM35 -> PA0 */ /* ATMega16, f=16MHz...
Ten kod nigdy działać nie będzie bo są błędne wektory przerwań. AVR-Libc 1.6.0, strona 123: USART0_RXC_vect Rx Complete, ATmega162 USART0_TXC_vect Tx Complete, ATmega162 Analogicznie USART1.
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....
.. 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]//...
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...
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
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 ////////////////////////////////////////...
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...
atmega16 przerwania usart usart atmega16 przerwanie przerwa usart
zakładanie nowych tematów przetwornica 200hz indesit instrukcja pralka
siemens przerywanie wydawania przerywanie wydawania proszę czekać
Lokalizacja modułu komfortu w Audi A2 Karta graficzna do zasilacza 350W: GTX 1650, RX 6400