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.
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.
Usuń całkowicie Waitms z pętli odbiornika a w nadajniku zwiększ wartość Waitms. Jak nie pomoże to zrób odbiór na przerwaniu od URXC.
Otóż nie może być w przerwaniu bo wtedy kolidowało by to z innymi przerwaniami, które się cyklicznie powtarzają. Problem jest taki, że czas obsługi tych przerwań jest różny, a więc czas poświęcony na odbiór danych też jest różny. Mogę jedynie próbować oszacować jaki przedział czasu jest przeznaczony na odbiór.
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?
Witam. Chciałbym zrobić odbiór danych z rs232 w przerwaniu. Programuje w C w WinAVR. Nie mogę znaleźć uchwytu przerwania od USART, jest jedynie od UART i nie chce działać. Nie wiem co robie źle. Dziękuję za wszelką pomoc. #include <avr/io.h> #include "delay.h" #include <avr/interrupt.h> #include <avr/signal.h> #define FOSC 16000000//...
Może skorzystać z przerwania, które UART zgłosi, kiedy odbierze znak. Wtedy kod może wyglądac tak: ISR (SIG_OVERFLOW2) { //obliczanie wartosci ktore maja byc wyswietlone na wyswietlaczu } ISR (USART_RX_vect) { //operacje na odebranych danych } main(){ //wlaczenie przerwan itp while(1){ //wyswietlanie...
Tak by wyglądało "przerwanie RX" w pętli głównej: if(bit_is_set(UCSRA,RXC)) { odb_x=UDR; odb_flaga = 1; } Następny etap pracy to odbiór danych przez uC z ustawieniami pracy wentylatorów użytkownika, a nie jak dotąd liczonymi ze wzoru w uC.
Sprawdź CKDIV8. Jakim terminalem się komunikujesz? Czy są jakieś objawy np. odbiór śmieci? Zrób na razie prosty program w pętli wysyłający co np. sekundę jakiś bajt, by sprawdzić odbiór przez terminal. Przy okazji - wiesz, że to nie ma sensu: [syntax=c]UCSR0C |=(0<<UMSEL00)|(0<<UMSEL01)| ...[/syntax] http://mikrokontrolery.blogspot.com/2011...
czyli takie cos powinno dzialac prawda? Hm ... wróżką to ja niestety nie jestem :( Pokazałem jak wczytać dane z USART-a do tablicy , a co Ty chcesz z nimi zrobić , to tego ja już nie wiem. Piotrek
Witam, 1. Tak, to dobry pomysł pod warunkiem, że odbiornik i nadajnik radiowy mają zaimplementowany własny algorytm przesyłania danych, a Ty komunikujesz się z nimi za pośrednictwem UART. 2. Jeżeli chodzi tylko o odbiór danych to tak, nie będą się zakłócały. Pozdrawiam, Piotr.
Witaj, Nie chcę korzystać z przerywań, ponieważ to właśnie odbiór danych z PCta ma być impulsem do działania programu na mikroprocku (gdy nie otrzyma on rozkazu nic się nie dzieje). Skoro odbiór danych z PC ma być impulsem do działania mikrokontrolera, to właśnie do tego są przerwania. Nie bój się ich to jest proste: http://mikrokontrolery.blogspot.com/2011...
Witam, mam problem z połączeniem po USARCIE tych dwóch procesorów. Sprawa wygląda następująco: atmega1284p ma być docelowo masterem, wysyła ramkę i w odpowiedzi dostaje ramkę zwrotną od atmega8. Obsługa ramek nie jest jeszcze napisana, na razie wysyłam 8 bajtów atmegą1284p i jeżeli wszystkie bajty zostają poprawnie odebrane, to atmega8 odsyła mi 11...
Ulepszyłbym o tyle, że skoro wykorzystujesz soft posiadający bufor cykliczny, to zamiast tak jak napisałeś blokującej obsługi USART, zmieniłbym kod tak, żeby odbierał w przerwaniach kolejne znaki i po natrafieniu na CR/LF sygnaizował, że do sparsowania jest cały wiersz. W ten sposób odblokowujesz pętlę główną. Oczywiście warto też zrobić tak, żeby przerwa...
Ja stosują coś takiego: /***************************************... int UART_ReceiveByteT (u08 *CzasMs) { u08 status; /* czeka na odbiór znaku lub koniec TimOUT */ while (!UART_ReceivedChar) if (!(*CzasMs)) return -1; //jeżeli TimOUT // Kontrola ramki status = UCSRA; if (status & (1 << FE))...
Veni, Vidi tak, Vici nie koniecznie. W programie, który załączyłeś nie ma konfiguracji i uruchomienia USART'a (str. 139 dokumentacji). Trochę dalej przedstawiono odbiór na przerwaniu (jeżeli USART jest wyłączony to flaga przerwania zawsze zero). Spróbuj skompilować prosty kod na przerwanie od timera, ale ze wszystkim, tzn. nie tylko uruchomienie ale...
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ł...
-> ruzumek BREAK mrugnie się jeżeli transmisja kończy się przed czasem np. wysyłasz szybciej niż możesz odebrać error mrugnie jężeli transmisja jest nie poprawna np. stak bitu stopu, niepasująca ilość tych bitów itp. -> iluzione #define FOSC 8000000ul // // Clock Speed powinno być definiowane w makefile. jak automatycznie nie dorzuci to project->configuration...
Ok, dzięki za link. Co do sposobu samej transmisji, to już chyba opracowałem sobie protokół - zamierzam w buforze zapisywać odebrane bajty w przerwaniu, a po zakończeniu przesyłania ramki - będę ustawiał flagę i główna pętla będzie procesować komende. Wszystko było by super - napisałem nawet prosty program, który odbierał dane i zapisywał w buforze....
Witam. Mam problem z komunikacją między btm-112 a atmega8 po usart, między btm - PC i Atmegą - PC nie ma problemów. Gdy z PC wysyłam komendy na uC to reaguje tak jak powinien, czyli gasi i zapala diodę, natomiast po połączeniu btm z uC zero reakcji. W czym problem? Prędkość transmisji się zgadza. Proszę o odp. na temat, taktowanie zostaje 1MHz! [syntax=c]#define...
(at)szelus Oczywiście DE i RE są połączone razem (zworka). Inaczej nie miałbym transmisji zwrotnej albo trzeba by podłączyć do dwóch różnych pinów ATMEGI. Zwłoki po przełączeniu się z nadawania na odbiór (20ms) i odwrotnie wydają się być i tak przydługie - jakby były przeznaczone dla starej elektroniki analogowej... ;-) Testowałem też różne odstępy...
OOPS już wiem. Przesunięcie bitowe to przesunięcie wszystkich bitów a nie tylko jednego. #define HC_TX_OFF HC_TX_DDR |= (1<<HC_TX);HC_TX_PORT &=~ (1<<HC_TX); zamiast #define HC_TX_OFF HC_TX_DDR |= (1<<HC_TX);HC_TX_PORT &= (0<<HC_TX); i już jest OK. To nie USART wyłączał wentylator tylko odczyt_odległości, który był uruchamiany...
Witam... Zabrałem się za uarta i wydaje się, że nie jest to takie tragiczne ale mam pewien problem... Chciałby odbiór zrobić na przerwaniu... Tzn żeby dopiero kiedy ustawiona jest flaga RXC (odbiór zakończony) zostało wywolane przerwanie i nastąpiło "odebranie" danych z UDR... Znalazłem uchwyt do tego przerwania, według dokumentacji USART_RXC... I teraz...
Gdyby nie było źle to bym nie pisał że jest źle. Jeśli pytasz czemu nie działa, a ktoś ci odpisuje że jest źle i trzeba to poprawić no to znaczy że jednak jest źle. Dokładnie ci napisałem co trzeba zrobić żeby wszystko działało jak trzeba. Wystarczy jedynie trochę własnej inicjatywy żeby to dopisać, a wiele do dopisania nie masz. 1) CONFIG COM - sprawdź...
Witam, Proponuje koledze postąpić troszkę inaczej. Rozbudować ramkę danych dodając znak startu i znak stopu. Odbieramy znaki i pakujemy je do bufora w przerwaniu a w programie głównym sprawdzamy czy odebraliśmy bajt start i stop oraz czy liczba bajtów w buforze jest prawidłowa. Kiedyś napisałem coś takiego z tym ze miałem o tyle łatwiej że bajty start...
Cześć. W programowaniu jestem początkującym, stąd oczywiście ten dział. Chce stworzyć program, na Atmega8A, który będzie dokonywał pomiaru na kilku pinach ADC i wysyłał dokonane pomiary przez BT HC-05 do aplikacji na telefon z androidem. Z telefonu ma być możliwość sterowania innymi opcjami, czyli AVR musi reagować na wydaną komendę, np. wysłanie wartości...
- może podpowiesz dlaczego funkcja wykonuje się jeden raz? Wpierw warto zrozumieć co dokładnie robi ten kod. Twoje zrozumienie może pomóc w lepszym zdiagnozowaniu problemu. Przyjrzyjmy się więc kluczowym elementom: 1. Funkcja `usart_inicjuj` jest odpowiedzialna za inicjalizację modułu komunikacji szeregowej (USART). Ustawia prędkość transmisji (BAUD),...
Witam Robię projekt z Techniki mikroprocesorowej. Docelowo ma to być, jak to my nazwaliśmy: smsos, który ma odebrać smsa, przeanalizować treść i odesłać odpowiedź. Jest to układ z Atmegą8, kwarcem 11059200Hz. Pin trzeci(Tx) jest połączony bezpośrednio z komórką i przez max 232 (jeśli zewrę) z wyjściem coma, tak że mogę odpierać na kompie przez minicoma...
Witam, mam dziwny problem, pomoże mi ktoś go rozwiązać? Chodzi o to, że buduję urządzenie, które na żądanie będzie mierzyło temperaturę układem DS18B20. Żądanie odbywa się poprzez naciśnięcie odpowiedniego przycisku na pilocie RC5. Całe moje urządzenie to dwa AVR: Atmega8 (jako dekoder RC5, który wysyła odebrany adres i komendę poprzez USART do drugiego...
Fatalna wiadomość? Kurcze, nawet nie wiedziałem, że od kilku lat miałem problem :D 1. Pokaż ten program nadający znaki - możliwe, że jeśli nie masz nadawania opartego na buforze kołowym i przerwaniach to znaki nie są upakowane maksymalnie gęsto. 2. Jeśli znaki są odbierane z opóźnieniem po stronie ETHERNETU (znaczy badasz ich odbiór za konwerterem uart->ethernet)...
Witam. Niedawno rozpocząłem swoją przygodę z Atmegą8. Chciałem sprawdzić jak działa interfejs TWI. Na podstawie książki pana Cezarego Klimasza zakupiłem układ 24c16wp i napisałem program. Niestety program zamiast wyświetlać mi w terminalu liczby od 255 do 0 wyświetla bliżej nieokreślone sekwencje znaków. Czy mógłby mi ktoś pomóc znaleźć błąd w moim...
Witam, buduję model pojazdu gąsienicowego sterowanego za pomocą telefonu z systemem android po przez moduł BTM222. Od dłuższego czasu próbuję uzyskać reakcję ze strony atmegi lecz bezskutecznie. Wyprowadzenia PORTC 0-3 podłączone są pod mostek h L298n. Aplikacja łączy się z modułem lecz przy wysłaniu komendy miga tylko dioda DATA przy BTM. Podejrzewam,...
[syntax=c]#include <avr/io.h> #include <avr/interrupt.h> #include <avr/wdt.h> #include <string.h> #include <util/delay.h> #include <stdio.h> #define BAUD 4800 #define MYUBRR F_CPU/BAUD/16-1 void USART_init(unsigned int myubrr) { UBRRH = (unsigned char)(myubrr>>8); UBRRL = (unsigned char)myubrr; UCSRB = (1<<TXEN)|(1<<RXEN);...
Jeśli nie chcesz zawieszać procesora to rób odbiór w przerwaniu i w formie bufora kołowego. Dodano po 47 Kolego na szybko napisałem Ci taki przykład obsługi takiego przerwania. Zakładam że znasz zasadę działania bufora kołowego bądź jesteś w stanie sobie doczytać w necie jego działanie. [syntax=asm] .dseg rxbuff: .BYTE 16 //bufor kołowy na odebrane...
Ja zrobiłem taki układ na SE T300 (może być też T68i) jeśli chodzi o odbiór sms i sterowanie czymś tam jest fajny przykład w samples - sms.bas Mój układ dzwoni do mnie i wysyła sms kiedy mam alarm na centralce, a po odebraniu sms o treści UZBR lub ROZBR uzbraja/rozbraja zdalnie centralkę alarmową. Jeśli zaś treść sms to ZAL lub WYL to układ steruje...
Witam Mam problem z komunikacją między dwoma uC. Dane są odbierane, jednak nie zgadzają się z wysyłanymi. Atmega32 - pełni funkcję Mastera #define VUART 38400 #define VUBRR F_CPU/(VUART*16)-1 #define T0_start 1 #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <avr/iom32.h> #include <stdlib.h>...
http://obrazki.elektroda.pl/8544906200_1... Witam. Jestem studentem Politechniki Gdańskiej. W tym semestrze jako projekt wykonywany w ramach zajęć wymyśliliśmy sobie zdalnie sterowany samochód za pomocą smartfona. Projekt wykonuję razem z kolegą, a ponieważ jest on już praktycznie ukończony, czas na prezentację :) Główne założenia projektu:...
Funkcja wysyłania działa mi dobrze. Funkcja odbierania niby dioda mignie jak coś odbierze, ale czy działa prawidłowo to nie wiem. W każdym razie gdy z PC wyślę coś dioda potwierdzi, że coś odebrałem, ale gdy wyśle to z powrotem to nic nie otrzymuje. Kod programu: rs232.h [syntax=c]#ifndef RS232_H #define RS232_H #ifndef F_CPU #define F_CPU 1000000UL...
Mam problem weźmy pod uwagę kod: /************** Inicjuje port szeregowy AVRa ************/ void USART_init(unsigned int myubrr) { /* Ustala prędkość transmisji */ UBRR0H = (unsigned char)(myubrr>>8); UBRR0L = (unsigned char)myubrr; /* Włącza odbiór*/ UCSR0B = (1<<RXEN); /* Format ramki: 1...
Zależy co znaczy z lekka je przekodowujemy. Tak, mam propozycję - XMEGA8E5 za jakieś 4-5zł w detalu. Odbiór danych z USART przez DMA, przekodowywania, nadawanie po SPI za pomocą DMA. DMA w trybie podwójnego buforowania co zapewnia stałą przepływność. Całkiem zaawansowane przekodowanie (np. FSK) można na E5 robić sprzętowo. Dodano po 1 Choć fakt AVR...
Mam problem z wysyłaniem i odebraniem z rs485. Jest to ATMEGA 8 + max485. [syntax=c]#include <avr/io.h> #include <util/delay.h> #include <HD44780.c> #include <avr/interrupt.h> #include <avr/pgmspace.h> #include <avr/eeprom.h> #include <avr/wdt.h> #include <stdio.h> #include <string.h> #include <stdlib.h>...
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:...
Witam, Mam pewien problem powiazany z UARTem pod atmega8l... Otoz mam pewnien program ktory pieknie dziala pod attiny2313(UART sprawny, komunikacja rs232<=>pc tez dziala dobrze). Problem narodzil sie, gdy chcialem przeniesc ten program na atmege8l... Podejrzewam, ze problem lezy we flagach... Nie znam sie jeszcze na tyle dobrze na C, zeby problem...
Witam! Mam taki oto kod: W funkcji main: while(1) { ReadKeypad(); if(!strcmp((const char*)bufferin,"Wlacz")... { x=0; device[1].dev_status=1; while ( UCSRA & (1<<RXC) ) dummy = UDR; } if(!strcmp((const char*)bufferin,"ylacz")...
codevision avr atmega 8515 nadawanie i odbior /***************************************... This program was produced by the CodeWizardAVR V1.23.8a Professional Automatic Program Generator © Copyright 1998-2003 HP InfoTech s.r.l. http://www.hpinfotech.ro e-mail:office(at)hpinfotech.ro Project : Version : Date : 2006-07-02 Author : j Company :...
Witam, Komunikuje ze sobą dwa Uc: Atmega8 - panel z wyświetlaczem i guzikami Atmega32 - baza gdzie mam wszystkie czujniki Kwarce 14.746 Mhz w obydwu przypadkach Transmisja dwukierunkowa half-duplex przez rs-485. W uproszczeniu panel z wyświetlaczem ma za zadanie wyświetlać wszystko co mu wyśle baza, czyli 21 znaków x 8 lini = 168 bajtów. Wysyłanie realizuję...
Problem stanowił ft232, po wymianie na inny wszystko zaczęło działać. Postanowiłem jednak odświeżyć temat ponieważ napotkałem się na jeszcze jeden problem. Przy wysyłaniu jakiegoś kilka razy jakiegoś ciągu znaków np: "dioda" Odbiór jest następujący (zarówno w VC# jak i w RealTerm). dioda dioda dddddddddioda dioda dioda dioda ddddddddddddiodadd tak wiec...
Napisałem sobie obsługę protokołu modbus pod Atmege8 (taką prowizoryczną). W fazie projektowej symulowałem zapytanie od Mastera które było analizowane zaraz po wystartowaniu. uC reaguje prawidłowo tzn. Wysyła ramkę zgodną z oczekiwaniami. Problemy zaczęły się przy odbiorze danych po interfejsie UART. Otóż dane odbierane przez uC nie zgadzają się z tym...
A skad pobierasz znaki do wyswietlania na LCD? Ja mialem zewnetrzny kwarc 1 MHz, ale fuse bit mialem tak ustawiony ze procesor chodzil mi na wewnetrznym zegarze 1MHz, ktory jest aktywny po pierwszym wlaczeniu procesora. I wowczas przy odbiorze znakow przez USART, wewnetrzny kwarc byl na tyle niestabilny ze przeklamywal mi znaki odbiorane przez UARTA.
Witam! Napisałem na szybko kod odbierający po 8 znaków z komputera. Pierwszy znak "?" jest znakiem startu. Następne 7 to dwie liczby (trzy i dwucyfrowa). Mikrokontroler nie odczytuje (poprawnie, bądź wcale) ostatniego znaku, wcześniejsze są ok. Nie wiem, gdzie mogłem się machnąć w tak prostym programie. Ze strony komputera korzystam z terminal by br(at)y....
[syntax=c]#define USART_BAUDRATE 2400 #define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1) #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <inttypes.h> #include <hd44780.c> unsigned char CRC8tab[256] = { 0x00,0x07,0x0E,0x09,0x1C,0x1B,0x12,0x15, 0x38,0x3F,0x36,0x31,0x24,0x23,0x2A,0x2D,...
/* ISR(koniec odbioru),ISR(zakonczenie nadawania RxD=>ON, RxT=>ON */ UCSRB = _BV(TXCIE)|_BV(RXCIE)|_B... Proszę coś z tym zrobić.
Witam Dołączyłem do pinu 1 RX i pinu 2 TX układ z MAX232 (piny 11, 12). Napięcia w układzie max232: pin 2-pin 15 jest +9,82V 6-15 jest -9,64V 11-15 jest +3,45V 12-15 jest +5,05V 13-15 jest 0V 14-15 jest -9,64V 16-15 jest +5,05V Ustaliłem prędkość transmisji 2400, 2 bity stopu, 8 bitów danych, odpaliłem HyperTerminala i cisza nic się nie dzieje nawet...
Witam, chce uruchomić transmisje szeregową na podanym w tytule uC i tutaj napotkalem na problem, poniewaz dokumentacja do 48 jest bardzo uboga :/ Zaimplementowalem cos, ale nie dziala. jaka uboga? o czym ty mówisz ? skąd ty takie ubogie dokumentacje bierzesz? wejdź na stronę www.atmel.com i pobierz z tamtąd pełną notę PDF do jakiego zechcesz tylko...
poszperałem w necie i znalazłem coś takiego To przerwanie jest od wysyłania danych, a nie od odbioru.
Dzięki, faktycznie. Kompletnie zapomniałem i o tym że łańcuch musi kończyć się na '\0', właśnie dlatego mi się krzaczki wyświetlały. Teraz funkcja wygląda tak: unsigned char USART_Receive( void ) // funkcja odbioru bajtu z RS232 { while ( !(UCSRA & (1<<RXC)) ); //odebrane = UDR; char buf[2]; buf[0]=UDR;...
Dzięki. Zrobiłem na przerwaniach i działa. Wie ktoś może jak zrobić timeout funkcji odbierającej dane w przerwaniu? Próbowałem z pętlą while i dekrementacją licznika ale nie działa. [syntax=c]/* Funkcja odbierająca dane z USART */ unsigned char USART_Receive( void ) { /* Wait for data to be received */ while ( !(UCSRA & (1<<RXC)) ){}; /* Get...
właśnie wkleiłem zmieniony kod: #include <avr/io.h> void USART_Init( unsigned int baud ) { /* Set baud rate */ UBRRH = 0; UBRRL = 51; /* Enable Receiver and Transmitter */ UCSRB = (1<<RXEN)|(1<<TX... /* Set frame format: 8data, 2stop bit */ UCSRC = (1<<URSEL)|(1<<U...
Witam, Chciałbym dokonać transmisji przez port szeregowy Atmegi. Niestety ciągle otrzymuje krzaki na terminalu. Czasami są to krzaki czasami inne litery, a niżeli te wysłane programem, często w terminalu pojawia się błąd frame error. Co lepsze program działa na symulatorze bez problemów... W tej chwili stosuje kod rodem z datasheet Atmegi: #include...
Witam szanownych forumowiczów! Od niedawna staram się nauczyć języka C na AVR. Postanowiłem zbudować poza migającą diodą LED i całą resztą "mini projektów" odbiornik sygnału DMX. W zamierzeniu chcę zrobić DIMMER PACK (sterowanie jasnością 4 urządzeń, stąd 4 kanały i detekcja przejścia przez zero). Jednak przy pisaniu programu napotkałem dość znaczące...
Witam, posiadam lanosa 1,5 16V rocznik '99. Chciałem skomunikować się z komputerem pokładowym, lecz niestety nie osiągnąłem sukcesu (układ testowy na avr-ku z lcd). To co do tej pory robiłem: Atmega8, wewnętrzne 8MHz, prędkość USART 8192 (UBRRH=0, UBRRL=60) -pierwsze podejście: RX i TX zwarte ze sobą, podłączenie do linii M ECU,masy wspólne, podczas...
odbiór usart usart atmega8 atmega8 usart
laser vam1201 strumienica zamiast katalizatora elizabeth sanyo
falownik danfoss akumulator easun lifepo4
Siemens EQ Plus Coffee Machine Steam Wand Dripping – Causes, O-Ring, Valve, Descaling YTS190R-1 – płyta główna Grundig Vision 2, Prosonic 19CS6, SABA CS1910 – typowe usterki, firmware, naprawa