Vizitator baigli Postat Iulie 25, 2008 Partajează Postat Iulie 25, 2008 Salut. Acesta e primul meu post pe acest forum.Am si eu o problema, si dupa ce am cautat pe internet si am rasfoit acest forum tot nu am gasit o solutie, orice programator am incercat, nu imi recunoaste microcontrolerul si nu pot face nici citire nici scriere.Am ales uC-ul ATmega16 iar pentru comunicarea serial circuitul MAX232 prin conexiunea TxD - RxD si RxD - TxD.Am folosit circuitul din figura. La uC am pus un quartz de 4 MHz, am facut si conexiunile handshake la mufa serial mama, si din cate am masurat am un potential de 4,8 V la intrare in max232 si de aproximativ 9,3 V la iesire la serial. BAUD l-am setat la 9600, si am folosit un monitor serial ca sa vad ce transmite circuitul.Am incercat diferite programatoare fara succes: cel de la AVR Studio, Basom (monitorul serial nici macar nu sesizeaza programul incercand sa deschida portul), AVR Dude (la citire insireaza o groaza de biti repetitivi dar nici o citire practic de pe flash). Nici un programator nu detecteaza macar circuitul, numai daca dau force Atmega16. :rolleyes: Din cate am incercat, la alegerea programatorului pentru circuit, STK500 cu avr dude a avut o tentativa timida de comunicare prin serial. Cum am stat cu noptile incercand sa fac circuitul sa mearga, va rog sa imi dati o idee sau daca am gresit cu ceva. Multumesc :prayer: Link spre comentariu
sofian Postat Iulie 25, 2008 Partajează Postat Iulie 25, 2008 orice programator am incercat, nu imi recunoaste microcontrolerul si nu pot face nici citire nici scriere. :prayer:cu schema aia nici un programator nu il recunoaste(ATmega16)aia este o schema de comunicare seriala nu de programare, sau se poate si programa dar in cazul acesta trebuie scris un "bootloader" cu alt programator in ATmega16 Link spre comentariu
Vizitator baigli Postat Iulie 25, 2008 Partajează Postat Iulie 25, 2008 Multumesc pentru informatie, programarea prin RS232 era singura solutie, avand pin-ul MISO ars. Cum pentru ISP am nevoie de pinul MISO, nu cred ca mai pot salva uC-ul. Link spre comentariu
srdjan Postat Octombrie 19, 2009 Partajează Postat Octombrie 19, 2009 Continui postul aici pentru a nu deschide altul: am facut jucaria asta: http://www.swharden.com/blog/2009-05-14 ... ia-max232/ si rezultatele sunt cam asa... are careva idee de ce? mentionez ca am folosit cristal de 18.432 si am l-am declarat in F_CPU... #define F_CPU 18432000UL // 1 MHz#include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> int main (void) { unsigned char data=0; UBRRL = 479; UCSRB = (1 << RXEN) | (1 << TXEN); UCSRC = (1 << UCSZ1) | (1 << UCSZ0); for (;;) { if (data>'Z'||data< 'A') { UDR = 10; UDR = 13; data='A';_delay_ms(100); } UDR = data; data += 1; _delay_ms(100); } } Link spre comentariu
ratza Postat Octombrie 20, 2009 Partajează Postat Octombrie 20, 2009 Pare a fi din cauza baud rate-ului, am impresia c? sînt u?or diferite, cel din controller ?i cel din PC. Recalculeaz? valorile pentru regi?trii de USART, care sînt depende?i de frecven?a de ceas. Am p??it-o ?i eu cu ATxmega... Link spre comentariu
nana Postat Octombrie 20, 2009 Partajează Postat Octombrie 20, 2009 Continui postul aici pentru a nu deschide altul:am facut jucaria asta: http://www.swharden.com/blog/2009-05-14 ... ia-max232/si rezultatele sunt cam asa... are careva idee de ce?mentionez ca am folosit cristal de 18.432 si am l-am declarat in F_CPU... #define F_CPU 18432000UL // 1 MHz#include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> int main (void) { unsigned char data=0; UBRRL = 479; UCSRB = (1 << RXEN) | (1 << TXEN); UCSRC = (1 << UCSZ1) | (1 << UCSZ0); for (;;) { if (data>'Z'||data< 'A') { UDR = 10; UDR = 13; data='A';_delay_ms(100); } UDR = data; data += 1; _delay_ms(100); } } conform codului tau UBRRL- e un reg de 8 biti iar 479, depaseste 8 biti deci corectam UBRR=479; si in acest caz mi se pare cam confuza treaba deoarece in data sheet spune asa ... pe la pag 42"? UBRR = Contents of the UART Baud Rate register, UBRR (0-255)" deci ... in fine nu stiu dece ai ales o frec asa de mare a cristalului.incearca asa cu UBRR=0x77; si UCR=0x18; sunt doar initializarea UART fara intreruperi.in caz ca vrei intreuperi anunta-ma... Link spre comentariu
srdjan Postat Octombrie 21, 2009 Partajează Postat Octombrie 21, 2009 multumesc de raspunsuri. sper sa am timp astazi sa mai ma joc cu circuitul si va voi spune ce si cum. revin cu edit Link spre comentariu
srdjan Postat Octombrie 21, 2009 Partajează Postat Octombrie 21, 2009 ok...nimic nu-mi iese.deci dispun de:atmega8max232nquartz 10.240mhzquartz 18.432mhzrezonator ceramic 12.00mhzconzi de 22pf si 15pfelectrolitici de 1uf si 10ufSe poate cu ce am (eventual folosind doar oscilatorul intern)ma joc cu avr-gcc si avrdude si terminal termitecine ma ajuta sa vad macar un caracter cum trebuie pe ecran ii fac o statuie din piesele ramase si aprind si o lumanare la biserica duminicaLE: stop joc... se pare ca am probleme la receptie (de catre atmega8) nu de transmitere Link spre comentariu
nana Postat Octombrie 21, 2009 Partajează Postat Octombrie 21, 2009 #include #include #include int main (void) { unsigned char data=0; // UBRRL = 479; // UCSRB = (1 << RXEN) | (1 << TXEN); // UCSRC = (1 << UCSZ1) | (1 << UCSZ0); UCSRA=0x00;UCSRB=0x18;UCSRC=0x86;UBRRH=0x00;UBRRL=0x33; while ((UCSRA & _BV(UDRE)) == 0) { if (data>'Z'||data< 'A') { data=UDR; UDR = 10; UDR = 13; data='A';_delay_ms(100); } UDR = data; printf("Functioneaza"); data += 1; _delay_ms(100); } } Vezi ca am modificat codul dat de tine e facut pentru atmega8 cu RC intern la 8MHz. Nu ai intreruperi pentru reciver si transmiter. deci nu faci verif daca bufferul este gol. Initial incearca sa afisezi o valoare determinata. dupa care vezi daca poti sa faci ce vrei tu !!! Link spre comentariu
srdjan Postat Octombrie 21, 2009 Partajează Postat Octombrie 21, 2009 am reusit fara intreruperi sa comunic la baud 115200 cu cristalul de 18.432mhz; la baud 230400 e total haotic rezultatul. am mai avut rezultate bunicele la baud 57600 cu rezonator ceramic de 12mhzcu oscilatorul intern de 4mhz mai mergea cam rar la 9600 (probabil varia mult frecventa)merci de ajutor... cu siguranta am sa revin cu nelamuriri. din pacate viata de familist nu-mi permite sa-mi dedic prea mult timp pt hobby Link spre comentariu
ramsesrr Postat August 1, 2010 Partajează Postat August 1, 2010 Ca sa nu deschid alt subiect,cum pot trimite de la microcontroler mesaje(nu doar caractere)?De exemplu:Temperatura este : 33 Link spre comentariu
srdjan Postat August 1, 2010 Partajează Postat August 1, 2010 va trebui sa ne spui ce microcontroller folosesti dar in principiu ce a postat nana e unanim valabil. dar va trebui sa adaptezi semnalul portului serial la cel al microcontrollerului pentru a-l proteja. pe portul paralel e ceva mai usor dar nu e greu nici cu serial. Link spre comentariu
ramsesrr Postat August 2, 2010 Partajează Postat August 2, 2010 Atmega32+max232,cate un caracter am reusitsa trimit dar siruri de caractere nu am inteles inca cum sa fac Link spre comentariu
srdjan Postat August 2, 2010 Partajează Postat August 2, 2010 sper ca or sa ma ierte operatorii ca am sa calc pe bec si iti trimit un link din care se poate intelege bine cum functioneaza: http://www.avrfreaks.net/index.php?name ... ic&t=45341 ideea e ca daca te uiti peste un exemplu si te uiti si la denumirea "intreaga" a registrilor vei intelege care registru cu ce se ocupa si cum functioneaza tot modulul (periferic) UART. practic astept sa fie pregatita periferia sa primeasca date spre a fi trimise. cand acest fanion este in regula pui un bit in UDR si reiei ciclul. toate astea dupa o initializare corecta. Link spre comentariu
ramsesrr Postat August 3, 2010 Partajează Postat August 3, 2010 Am reusit sa afisez siruri de caractere.Cum pot sa fac sa nu imi afisieze totul pe o singura linie??Acum e de genul chestie1 chestie2Eun vreauchestie1chestie2Am incercat cu \n dar nu sti daca il pun cum trebuie ca nu are nici un rezulatat. Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum