proponuje cos takiego: #include <avr/io.h> #include <avr/delay.h> #include "io.h" void USART_Init( unsigned int baud ) { //ustawienie portu DDRD &= 0xFE ; DDRD |= 0x02 ; PORTD |= 0x03 ; /*set baudrate*/ UBRRH = (unsigned char)(baud>>8); UBRRL = (unsigned char)baud; /*enable receiver and transmitter*/ UCSRB = (1<<RXEN)|(1<<TXEN);...
Nie mogę znaleźć uchwytu przerwania od USART, jest jedynie od UART i nie chce działać. O ile mi wiadomo to nie ma żadnego rozróżznienia między przerwaniem od USART a UART. Niewazne czy Uklad transmisji szeregowej pracuje synchronicznie czy asynchronicznie i tak zawsze jest to samo przerwanie generowane. A moze by tak odblokowac przerwania od odbioru...
[syntax=c]if (poz_odczyt > ROZMIAR) { poz_odczyt = 0; }[/syntax] tablice w C są indeksowane od zera. Jak masz rozmiar = 3 to ostatnim indeksem tablicy jest 2. Powyższy kod powinień więc wyglądać tak: [syntax=c]if (poz_odczyt > ROZMIAR - 1) { poz_odczyt = 0; }[/syntax]
Khmmm, po pierwsze to niech kolega docelowo zrobi obsluge odbioru na przerwaniu, ale narazie to nie ma znaczenia. Po drugie :> zalezy z jaka czestotliwoscia wysylasz znaki. Bo jesli z komputera kazesz mu wyslac od razu caly ciag, a w programie kazesz mu po kazdym odebranym znaku odczekac 200+200ms to kazdy znak ktory przyjdzie w tym czasie zostanie...
UCSRC i UBRRH to jeden rejestr. Jeśli zapisujesz do niego wartość z zerem na bicie 7 - to zapisujesz UBRRH; jeśli z jedynką - zapisujesz UCSRC. Przykład z katalogu właśnie to ilustruje. Zapisujesz wartość z zerem na b7 - i zapis idzie do UBRRH, następnie zapisujesz wartość zawierającą 1 << URSEL - i zapis idzie do UCSRC. Zwróć uwagę, że obie nazwy...
Natomiast w sytuacji gdy zarówno cały Timer2 jak i Usart robiony jest na przerwaniach tego problemu nie ma. Po to one są :) Powodzenia w dalszych pracach.
Witam. Mam nadzieję, że zastosowałeś chociażby konwerter Max232?
Ok, użyje sprzętowego uarta i tyle to ja wiem, ale jakimi parametrami go ustawi? Ile bitów transmisji, stopu, parzystości i czy z inwersją? "Bo Bascom jakoś ustawi" to jest złe rozwiązanie. Nawet sprzętowego uarta przepuszcza się przez CONFIG COM żeby miec pewność że nie będzie niespodzianek.
Witam, zanim zabierzesz się za pisanie własnej obsługi przerwań do RS232 w Bascomie, to może najpierw spróbuj zrobić to w oparciu o dobrodziejstwa jakie daje ci Bascom. nie znasz poleceń INPUT , INKEY czy PRINT ???? do tego jeszcze może Config Serialin bo w powyższym kodzie odstawiasz niezły "miszmasz" i nie ma co się dziwić, że ci nie działa. Oczywiście...
Musi być coś co polaryzuje linie w spoczynku. Zwykły transceiver RS485 musi mieć sygnał różnicowy>200mV, poniżej tej wartości działanie jest niezdefiniowane. Dodatkowo przy braku takiej polaryzacji każde zakłócenie generuje odpowiedź, co właśnie obserwujesz. Daj rezystor od A do Vcc i od B do GND, wartość około 680 om.
Posiadam obecnie na stanie transoptor 4n35. Przy jego użyciu da się wykonać tą transmisję przy użyciu dwóch przewodów? Do transmisji jednokierunkowej z transoptorem ten dwużyłowy przewód w zupełności wystarczy. Tu jest przykładowe połączenie transpotora: http://www.electronics-tutorials.ws/arti... Ten transoptor powinien być zamontowany...
Zastanówcie się Koledzy, co się będzie działo, kiedy wrzucicie do UDR ostatni bajt do nadania. Kto i kiedy skasuje zgłoszenie przerwania TXD po wysłaniu tego bajtu? W obsłudze przerwania to nie nastąpi, więc przerwanie pozostanie zgłoszone i będzie obsługiwane na okrągło - patrz granica stron 137/138 aktualnej wersji (aa) doc2486.pdf Flaga przerwania...
Jest tu co najmniej kilka błędów. Pierwszy to taki, że funkcja uart_getc nie jest atomowa. W ogóle kolejka jest zrealizowana źle - nie uwzględnia, że odczyty/zapisy następują asynchronicznie, w związku z tym pewne operacje (np. uaktualnienie wskaźników początku i końca) muszą być robione atomowo. Przypadkowo to działa przy zapisie, bo ISR jest wykonywane...
Zauważyłem że w funkcji ISR (USART_RXC_vect) sprawdzasz czy bity błędów są wyczyszczone (FE, DOR, PE). Natomiast co w sytuacji gdy nie są wyczyszczone? Może, któryś się ustawia? Może tędy droga.
Wystarczy, że nie włączysz USART.
Zacznij od poprawnego zdefiniowania F_CPU: http://mikrokontrolery.blogspot.com/2011...
Np usunąć włączanie przerwania od nadawania albo dodać taką obsługę w programie. Inaczej program leci w krzaki. Swoją drogą, jak daje radę wysłać cały tytuł to i tak jest niezły. Ja na podstawie analizy dałbym mu jedną literkę.
Procedura "USART_Transmit" wykorzystuje sprzętowego USARTa ATmegi8. Działa ona w ten sposób, że najpierw sprawdza czy bufor w którym przechowywane są dane do transmisji jest pusty. Jeżeli nie jest pusty to czeka na jego wyczyszczenie, gdy stwierdza, że jest już pusty to wpisuje dana którą przekazujesz jako parametr do rejestru UDR, i transmisja odbywa...
No bez przesady. Myślisz, że przejściówka o której pisze Daniel880 ma konwerter poziomów? Nic na ten temat nie wspominał. Przejściówka jaką posiadam jest oparta na pl2303 i jak wynika z noty to pracuje na poziomie napiec TTL. Jeśli wyjścia z niej są TTL to moim zdaniem tak właśnie jest.
- F_CPU (czy jakąkolwiek inną makrodefinicję) możesz zapodać w makefile'u jako dodatkowy parametr dla gcc ( -D ). co jest opisane we wskazanym artykule. - Przy problemach z komunikacją przydaje się analizator logiczny - takim klonem Saleae za ~40zł można całkiem sporo zdziałać. lub za 7$ z darmową dostawą na aliexpress, czy ebay,
Programujesz tylko Atmegę, a w jej sofcie zawierasz komunikację z RFM. Sam moduł radiowy nie posiada (chyba) pamięci EEPROM itp, więc po każdym włączeniu musi dostać sekwencję konfiguracyjną, a następnie ramki danych.
Do obliczania UBRR możesz użyć makra z <util/setbaud.h>. [syntax=c]#define BAUD 9600 #include <util/setbaud.h> int main() { UBRRH = UBRRH_VALUE; UBRRL = UBRRL_VALUE; [/syntax] [syntax=c]UCSRC = (1<<UCSZ1)|(1<<UCSZ0);// <-- tutaj dane lecą do UBRRH zamiast do UCSRC[/syntax] Kiedy zapisujesz do rejestru UCSRC, musisz ustawić...
co do odbioru masz 2 mozliwosci albo czekac az cos przyjdzie albo uzyc przerwania ".org 0x00B ;USART, RXC USART, Rx Complete" w momencie odebrania jednego bajta nastapi przerwanie. w obsludze przerwania nalezy odczytac np "in r16, UDR" a nastepnie mozemy sobie zapisac r16 np do ramu i "reti". jak bedziesz mial problem pisz na gg jestem praktycznie caly...
Witam, właśnie przerabiam kolejne ćwiczenie z książki J. Dolińskiego, ale przechodząc do rzeczy... Chcę wysłać kolejno w pętli za pomocą funkcji "WyslijTekstROM" 3 kolejne stringi, jednak przy wysyłaniu pojawia się następujący problem, że tylko ostatni string wypisywany jest na terminalu cały, a 2 początkowe są poucinane. Sądzę, że problem może leżeć...
Jest o tym oczywiście wzmianka w helpie w temacie dotyczącym PORT D. The UCR register will by default not set bits 3 and 4 that enable the TXD and RXD pins for RS-232 communication. It is however reported that this not works for all chips. In this case you must clear the bits in the UCR register with the following statements: RESET UCR.3 RESET UCR.4...
Witam, mam taki problem. Potrzebuje sprawdzić obecność modemu, wyłam przez USART komendę "AT" i czekam na odpowiedz. Wiadomo, że mogę sie nie doczekać wiec potrzebuje ustalić jakiś czas oczekiwania. Na razie napisałem coś takiego: unsigned char USART_Rcv(void) { int i=400; char p; while(!(UCSRA & (1<<RXC)))/*...
ATmega8 nie działa na 3,3V: http://mikrokontrolery.blogspot.com/2011... Jakim więc cudem działa Ci transmisja?
1. Nie podpinaj się pod wątek sprzed 9 lat. 2. Program działający na AVR raczej nie może decydować o tym, kiedy moduł Bluetooth albo PC zechce mu coś przesłać. 3. "Mam za zadanie przewieźć maluchem 5-tonową maszynę, bez rozbierania." Dobierz środki do zadań, a nie zaczynaj od środków. Znajdziesz mnóstwo małych uC po 4 zł, które mają po 2 UARTy.
Co do programu na megę328: 1. Niepotrzebnie dołączasz sfr_defs.h 2. O F_CPU w kodzie było już miliony razy na forum. 3. Dla ułatwienia obliczeń prędkości polecam util/setbaud.h 4. W rejestrze UCSR0C ustawiasz bity, które po resecie są ustawione. 5. W UCSR0B nie włączasz przerwania od odbioru (bit RXCIE)! Dodatkowo niepotrzebnie stosujesz sumę bitową...
No i doszedłem do tego w czym tkwi problem. Otóż funkcja zapisująca dane do EEPROM podstępnie włączała przerwania i to one powodowały błędne wykonywanie programu. Problem rozwiązałem, temat zamykam :)
1) w przerwaniu odbierającym bajt lepiej wrzucić do do zmiennej albo buforka i opuścić przerwanie. Obsługę polecenia zrobić w pętli głównej. Tym bardziej że wysyłasz tam wiadomość - nie wiem czy nie powoduje to złej interakcji. 2) zamiast pwm1value = pwm1value+wiadomosc*10; powinno być pwm1value = 10*pwm1value+(wiadomosc-'0'); 3) najlepiej rozdzielić...
lcd_string jak widać w kodzie potrzebuje jako parametr wskaźnik na tablicę znaków. Czyli nie to co zawiera UDR - znak. Potrzebujesz użyć funkcji wyświetlającej znaki - poszukaj. Albert
Witam. Ostatnio napotkałem świetny temat na elektrodzie a mianowicie [url=http://www.elektroda.pl/rtvforum/to... sterownik . Kolega wykorzystuje interfejs USART do komunikacji i sterowania serwami. Jednak po kontakcie z autorem nie ma On programu do sterowania tymi serwami ( w miarę graficznego). Świetnym rozwiązaniem było by sterowanie...
Dokładnie, Bez podania UL blędny wynik spowodowany jest za małą dokładnością obliczeń.
Zapytaj producenta. Ewidentnie jest jakiś problem po jego stronie.
Ja bym napisał tak, jak w załaczeniu. Zmieniając wartość dla zmiennej Czas_led , można zmieniać czas świecenia ledki.
Witam! Chciałem nieco poeksperymentować z moją atmegą i dorzuciłem kwarc. Ustawiłem fuse bity (hFuse: C9, lFuse: FF, Lock bit: 3F) i niestety troszeczkę się coś posypało. Obsługa USARTa, która wcześniej działała teraz jakoś gorzej sobie radzi bez względu na ustawioną prędkość. Testowałem nawet kilka 'gotowych' kodów i zawsze lecą mi jakieś krzaczki....
Masy muszą być połączone.
Problem podobny, więc zapytam w tym temacie. Poniżej znajduje się kod programu do wysyłania danych przez USART do PC (przejściówka USB na układzie FT232RL). Wysyłanie jednego znaku z wykorzystaniem funkcji USART_TransmitChar działa tak jak powinno, problem pojawia się z funkcją USART_TransmitString. #include <avr/io.h> #include <util/delay.h>...
Ten program wysyła bajty odczytane z pamięci jako znaki, a nie jako sekwencje cyfr ASCII. Zacznij od programu, który będzie w pętli co jakiś czas wysyłał np. kolejne cyfry lub litery. Jeśli to zadziała, będziesz wiedział, że masz poprawną transmisję - wtedy włącz obsługę pamięci i ew spróbuj wysyłać jej zawartość zamieniając ją na wartości np. szesnastkowe...
Nie wystarczy itoa? http://pl.wikibooks.org/wiki/C/itoa Ja wiem, wiem - biblioteki zwiększają zajętość flash... , ale myślę (w tym przypadku), że jeżeli projekt jest mały i masz jeszcze trochę flash'a i RAM oszczędzanie - poprzez pisanie własnych funkcji konwertujących int na string nie ma sensu. Ale wracając do twojego kodu: W twoim przykładzie brak...
Błędne są nazwy rejestrów. Ale poprawnie tego nie jest banalne - ATTiny85 korzysta z interfejsu USI, którego nie ma ATMega8. Ona ma USART, wymagane zmiany w kodzie będą znacznie większe niż tylko zmiana nazw rejestrów. Także albo ściągnij wersję dla swojego procka, alb temat sobie odpuść do czasu aż nie poznasz bliżej c, assemblera i przede wszystkim...
Po pierwsze żle ustawiony crystal na nadajniku.
BT RS232 Adapter DTE coś takiego: http://www.interprojekt.pl/katalogp.aspx... Zmiana tych bitów nic nie dała.
mirekk36 dziękuję za bardzo wyczerpującą odpowiedz! Przy transmisji(elementy na płytce stykowej) przy prędkości transmisji 1200 baudrate i wysyłaniu ramki co 50ms, coś już zaczyna działać, jak już kupiłem te moduły to będę męczył się z częścią programową, może coś z tego uda się wykombinować Pozdrawiam
Przymierz się np. do STM32F4xx
Jakieś 4 dni męczyłem się żeby uruchomić transmisję pomiędzy Atmegą a kompem po rs232. Niezmiernie zaskoczyło mnie to, iż wszystko zaczęło działać gdy bity:UCSZ0,UCSZ1,UCSZ2 ustawiłem na 0. Czyli (według informacji Atmela) ramka danych miała 5 bitów, a przesyłałem dane 8 bitowe. Przy ustawieniu tych bitów na ramkę z 8 bitami danych nic nie chodzi:nie...
Podaj częstotliwość kwarcu, wybraną prędkość (baudrate), oraz kod - którego używasz (po stronie Atmegi na początek).
Witam, Może wiecie gdzie znajdę opis znaczenia poszczególnych bitów specjalnych rejestrów Atmega8 - chodzi mi przede wszystkim o bity i znaczniki przerwań od USART'a (flagi) i Timerów - w pdf'ie tego nie widziałem? I jeszcze jedno, skoro ta Atmega posiada sprzętowy I2C to czy Bascom korzysta z programowej obsługi tego protokołu tak jak w przypadku 89C2051...
Kończę pewien mały projekcik no i do ukończenia została mi tylko komunikacja z komputerem. Atmega8 przez MAX232 na złącze RS232. No i lipa. Konsola milczy. Próbowałem diagnozować ale nic z tego. W necie znalazłem masę przykładowych projektów z wykorzystaniem MAX232 i podpinam się tak jak trzeba ale układ nie daje oznak życia. Multimetrem zbadałem napięcia...
Witam :) Zrobiłem układ, którego głównym elementem jest uC Atmega 8. Problem w tym że posiada ona w swojej strukturze tylko jeden port USART. W mojej aplikacji posiadam dwa urządzenia które komunikują się wykorzystując właśnie ten interfejs. Dodatkowo jedno z nich zasilane jest napięciem 3,3 V (odbiornik GPS) drugie natomiast 5 V (telefon). Analizując...
Ocyzwiście że nie działa - zamast kilku tablic tabtempP zadeklaruj jedną dwuwymiarową - wtedy zadziała. AVR studio, a dokładniej kompilator, rozumie wszytskie zapisy języka C, o ile są poprawne. Masz źle zaprojektowane dane i algorytm. Uporządkuj to, a całość wejdzie pewnie i w ATmega8.
http://obrazki.elektroda.pl/7969630300_1... Najprostszym rozwiązaniem było kupienie FT232, ale w wyniku porównania jego ceny z ceną ATmega8 nie było ono zbyt ekonomiczne. Dlatego autor postanowił zaprojektować konwerter na mikrokontrolerze. A jak jest już mikrokontroler, to sam USART wydaje się minimalistycznym rozwiązaniem. Stąd pomysł...
Funkcja _delay_ms jest typu inline więc użycie jej drastycznie zmniejsza pamięć flash. Jeśli chodzi o RAM , zbyt dużo zmiennych globalnych, pozamieniaj niektóre na zmienne lokalne. Jeśli dostajesz po USART dane do kompa i piszesz program w borlandzie to może warto niektóre obliczenia przenieść na pc a nie liczyć w uC. Wymyśl sobie jakiś standard kodowania...
Znalazłem Tylko że muszę użyć układ scalony MAX232 do "pogodzenia" napięć PC i TTL. I to wszytsko ale jak przesyłać dane. Do transmisji danych w ATmega8 musisz użyć USART (Universal Synchronous and Asynchronous serial Receiver and Transmitter) w trybie asynchronicznym. Łączysz pin wyjściowy oznaczony w ATmega8 jako TXD z wejściem RXD w porcie szeregowym...
ok, jako, że nie wiedziałem gdzie dopisać usart transmit, skorzystałem dla sprawdzenia z gotowego kodu, efektem tego było wysyłanie znaczków, które trudno nawet jest nazwać , może mi ktoś wytłumaczyć dlaczego tak się dzieje ?? źródło kodu: http://forbot.pl/blog/port-szeregowy-int... [syntax=cpp] #include <avr/io.h> #include <avr/interrupt.h>...
Może dlatego, że niewiedzieć czemu po wysłaniu komendy czekasz na odebranie kolejnego znaku i go usuwasz odczytując UDR (dummy=UDR). Kolejna sprawa - te strcmp jest bez sensu, sprawdzać powinieneś dopiero po odebraniu danych. Ew. trzebaby zamazywać cały bufor, bo tak jak to masz zrobione przy odbiorze kolejnych komend bufor jest mixem nowych i starych...
Czemu nie spróbować USART?
Oto czesc programu na procku Atmega8: while(1) { unsigned char USART_Receive(); pomiar1=UDR;//wchodzacy ltoa(pomiar1,bufor1,10); } Wyglada to tak jakby USART_Transmit(tmp); zmienialo wartosc zmiennej pomiar1 przed petla. Troche zamotalem ale prosciej nie umie. Gdzie robie blad? Biblotek nie wklejam bo wydaje mi sie...
Witam, od kilku dni próbuję wygrać nierówną walkę z programowym pwm i usartem na atmedze8. Wysyłam z nadajnika dane za pomocą USART (sprawdzane wielokrotnie na bank są dobre) do płytki z atmegą i serwomechanizmem. Jeżeli serwo jest sterowane bez ingerencji danych z USART to wszystko działa jak trzeba, w momencie gdy chcę wysłać gotowe dane do płytki...
witam, mam problem z konwersją float'a na tablice charów. char tablica[4]; sprintf(tablica, "%G", temp_in); USART_Transmit(tablica[0]... USART_Transmit(tablica[1]... USART_Transmit(tablica[2]... USART_Transmit(tablica[3]... w terminalu pokazuje się tylko znak zapytania...
sluszna uwaga!
Problem polega na tym, że mój kompilator wyrzuca błędy a nie pokazuje mi gdzie one są (i tym samym nie mogę ich skompilować) ... To je pokaż :) Szukałem na internecie poradników do terminala UART ... USART na przerwaniach: http://mikrokontrolery.blogspot.com/2011... oraz stosuj pokazany tam prawidłowy sposób obliczania...
Spójrz w dokumentację procesora (rozdział UARt lub USART, tabelka "Examples of UBRRn Settings for Commonly Used Oscillator Frequencies". Dla 8MHz i 38400 prędkości błąd dobrania częstotliwości wynosi 0.2%. Dla innych "normalnych" wielkości jak 57600,76800,115200 to jest >5%, podczas kiedy błąd nie powinien przekraczać 2%. Dla 16MHz 76800 powinien działać...
Skorzystaj z opcji RTS/CTS.
Witam. Temat wątku wziął się stąd, że na forum znalazłem już kilka o podobnej tematyce jednak żaden nie pomógł mi z tym zagadnieniem. Programuję na Linuksie na AtMega8. Napisałem sobie proste biblioteki do obsługi USART oraz TWI jednakże chciałbym teraz spróbować popracować z przerwaniami i tutaj jest problem. Mam taki oto kod: [syntax=c] ISR(USART_RXC_vect)...
USART+ ATmega8+LCD+ emulator terminala. No i jakiś programator i kompilator.
Brak wspólnej masy?
tak myślałem że to właśnie o to chodzi tylko nie wiem teraz jak to rozwiązać. Czyżby USART na przerwaniach?
Okazało się że winny był kondensator na zasilaniu maksa:( wcześniej go nie ruszałem ale w końcu pomyślałem że też go wymienię i teraz działa:| czyli złośliwość rzeczy martwych. Dziękuje wszystkim za pomoc.
Zgadzam się z uwagami. Ale takie są poczatki.
Podepnij kwarc i na nim sprawdź. Generalnie ATMega nie powinna byc taktowana z RC jeśli myślisz o USART.
Zgaduję, że problemem jest komunikacja po USART - wysyłanie znaków pewnie blokuje program w przerwaniu na spory odcinek czasu.
Ale nie lepiej jest użyć portu szeregowego (COM)? Przecież procki mają na pokładzie wbudowane porty szeregowe w przypadku Atmega8 jest to USART.
Zobacz jak zrealizowałem to na ATmega8: http://mikrokontrolery.blogspot.com/2011...
Problem rozwiązany brak sterowników.
Obojętnie który.
Mi to wygląda na SPI a nie na UART.
I2C i SPI nie wymagają kwarcu, gdyż są to interfejsy synchroniczne. Z kolei USART na wbudowanym RC z M8 może nie działać i taka konfiguracja jest niezalecana. Więc kwarc musi być. Jaki? To ma mniejsze znaczenie, zawsze dobierzesz podział na ARM i AVR tak, aby błąd był możliwie mały. Z drugiej strony w cenie ATMega8 kupisz sobie np. XMEGA32E5, która...
Witam, napisałem taki kod: [syntax=c]#define F_CPU 8000000UL #define FOSC 8000000UL// Clock Speed #define BAUD 19200 #define MYUBRR ((FOSC / 16 + BAUD / 2) / BAUD-1) #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> void USART_Init( unsigned int ubrr) { /* Set baud rate */ UBRRH = (unsigned char)(ubrr>>8);...
Alfabet w kołko wypisuje?
Witam wszystkich! Mam pewien problem, który co prawda rozwiązałem, ale rozwiązanie te mnie nie zadowala. Do rzeczy. Postanowiłem napisać funkcję, która jako argument pobiera napis i po znaku wklada do UDR'a. Najpierw mój program wyglądał tak: #define F_CPU 1000000L #define BAUD 9600 #define MYUBRR F_CPU/16/BAUD-1 #include <avr/io.h> #include <util/delay.h>...
Oczywiście że możesz ja używam do komunikacji wewnętrznego (8MHz atmega8535). Nie ma znaczenia jakiej prędkości oscylator weźmiesz jednak musisz pamiętać o tym że nie koniecznie wszystkie prędkości wyciągniesz na USART.
Ten parametr UBRR został po prostu źle obliczony powinien dla 1MHz być 5. Dla zainteresowanych polecam: http://www.josephn.net/avr/avr_ubrr_calc... Nie trzeba korzystać z kalkulatorów wystarczy korzystać z nagłówka setbaud.h Przeanalizuj punkt Prędkości transmisji oraz funkcję usart_inicjuj(): http://mikrokontrolery.blogspot.com/2011...
Przejrzenie specyfikacji USARTa 16550 sugeruje, że powinien on dać radę spokojnie pracować z takimi prędkościami. Pytanie jednak, czy RealTerm i system operacyjny potrafi poprawnie obsłużyć niestandardowe prędkości i odpowiednio do nich zaprogramować USART.
Nie w tym tkwi problem, ale literówkę poprawiłem. Procesor sam ze sobą się komunikuje ale z Terminalem nie chce, podłączam atmega8 i za każdym resetem pojawia mi się nie to co powinno
Mam również problem z ATmega8L. Nie moge odczytać informacji z UARTa. Robię tak, jak jest to opisane w datasheet ale nie dziala - odczytuje "śmieci". Zastosowałem przerwanie które wywoływane jest przy RXC=1 czyli wtedy jeśli coś jest w buforze. Proszę o pomoc.
Tylko ze ATmega8 obecnie jest prawie nieosiąglna.
Witam, mam krótkie pytanie: czy modbus rtu możemy odbierać (nadawanie mnie nie interesuje) poprzez USART tak jak tryb ASCII i jak jest to opisane w datasheet Atmegi?
Dlaczego wybrano akurat ATmega8 a nie jaki inny mniejszy(gabarytowo) procesor na przykład z serii Tiny? Autor projektu wszystko napisał :wink: "Program size is 2.8KB. Since ATtiny45 has no USART, 8bit timers make 4800bps timing. The USART version is also developed for ATmega8/48/88 and achieves the higher transfer rate."
Wielkie dzięki za pomoc. Posłuchałem twojej rady i zrobiłem inaczej :) . Wielkie dzięki. Zamykam temat
W avr stos liczy wstecz od podanego adresu. to znaczy ze jak wpisałeś 127 i dwa razy push to zmienne na stosie będą aż w 126. Nie wiem dlaczego akurat wpisałeś tam 127 - M8 ma 1K ram i naprawdę można tam wpisać 1023. Wtedy nie będzie ci sie prawie nigdy nakładało. O ile dobrze pamietam to w kompilatorach asm dla avr domyślnie nie podaje sie gdzie zmienna...
Po pierwsze jak odbierasz w przerwaniu RXC to po co sprawdzasz flagę czy jest odebrany bajt? Wiadomo, że jak jest przerwanie to coś czeka w buforze odbiornika. Co to timeout to wykorzystaj timer. Jego licznik jest niezależnie inkrementowany, można nawet wykorzystać przepełnienie i przerwanie z tym związane do zresetowania maszyny stanu związanej z USART.
ATMEGA8 ma "Programmable Serial USART" czyli RS'a można zrobić sprzętowo, a co do języka programowania , jeżeli ma to byc na studia to raczej w C. Wiem że większość profesorów nie trawi Bascom'a (może i to dobrze:) ).
Ja miałem już kiedyś do czynienia z bliźniaczym wyświetlaczem tego typu. Najpierw sterowałem go poprzez COM z kompa, a później Atmega8 poprzez jej USART, tyle że program był w C, w Bascomie tez nie powinno być problemu. Jeśli temat jest nadal aktualny to pisz.
USB <--> FT232RL <-USART-> uC(atmega8?) <-SPI-> wyjście programatora- tak, ale ten uC(atmega8?) trzeba najpierw zaprogramować. Jakimś programatorem. A programator dopiero robisz. Wstaw to na ->mikrokontrolery-> ogólne.
Tak się tego nie da zrobić dobrze - uruchom Timer do sterowania PWM i zmieniaj współczynniki wypełnienia na podstawie poleceń. zapomnij o pętlach z "delay"!
Witam, jestem w trakcie pisania bootloadera do moich procesorow pracujących w sieci rs485 ':Size Address Type Data Bytes Checksum ':10 00 00 00 26 C0 B3 C0 B3 C0 B3 C0 B3 C0 C5 C0 C5 C0 D0 C0 A4 jak sądzę w tej lnijce czystych danych jest w sumie 16 słow czyli 32 bajty. z noty atmega8 wynika, że strona musi byc skompletowana [oczywiscie przed tem wyczyszczone...
UART ruszył! Błąd w ustawieniu rejestru od konfuguracji USARTa - copy&paste z ATMEGA8 nie zadziałało ;/. Pozdrawiam!
A odebrany bajt przez UART jest równy nadanemu? IMHO przede wszystkim przejdź na kwarc - na ATMega USART bez specjalnych zabiegów nie będzie działał prawidłowo na wew. generatorze RC. Parę dni temu byłu tu opisywany podobny problem... użycie kwarcu go rozwiązało.
usart atmega8 odbiór usart atmega8 atmega8 projekt usart
indukcyjność łuku budowa magnesu aparat zacina telefon
schemat fotela peugeot schemat fotela peugeot
Kalibracja liniowości wagi CS2: krok po kroku Jak usunąć zapach spalenizny z portu ładowania?