Sari la conținut
ELFORUM - Forumul electronistilor

atmega16 + MAX232


Vizitator baigli

Postări Recomandate

Vizitator baigli

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
  • Răspunsuri 15
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • srdjan

    7

  • ramsesrr

    3

  • nana

    2

  • sofian

    1

Top autori în acest subiect

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

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
  • 1 an mai târziu...

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

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

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 ... :nas: 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

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 :sparge: 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

#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

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
  • 9 luni mai târziu...

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

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

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

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 cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări