avr at90sub162 UART
avr at90sub162 UART
Hej
Håller på och pular lite med UARTEN på en avr at90usb162:a försöker koppla den till en PC
Har kopplat ihopp alting, inklusive en maxim 232 som konverterar ttl<->rs232 signalnivå
Får det dock ej att fungera... så har börjat felsöka, men som sagt det kan vara många fel, 232 chippet eller koplingen av det, avr:ens Rd/RX, programmet etc etc
så för att underlätta lite, är det någon som har en liten smidig kodsnutt som petar ut en textsträng eller char på uartens TD ? skulle vara bra och gämföra så man vet att man har en fungerande kod.
Håller på och pular lite med UARTEN på en avr at90usb162:a försöker koppla den till en PC
Har kopplat ihopp alting, inklusive en maxim 232 som konverterar ttl<->rs232 signalnivå
Får det dock ej att fungera... så har börjat felsöka, men som sagt det kan vara många fel, 232 chippet eller koplingen av det, avr:ens Rd/RX, programmet etc etc
så för att underlätta lite, är det någon som har en liten smidig kodsnutt som petar ut en textsträng eller char på uartens TD ? skulle vara bra och gämföra så man vet att man har en fungerande kod.
Hmm, det här är ju inte precis den vanligaste AVRen.
Vilket programmspråk skriver du i??
Har du testat kodexemplena på s152-153 i databladet?
Har du kommit ihåg att göra om TXD1(PD3) till utgång i DDRD-registret?
Har du ställt in rätt baudrate med tanke på din oscillator, du har väl koll på vilken du använder. Default är ju oftast den interna RC-oscillatorn med ckdiv8 satt.
Har du testat med oscilloskåp att det händer något på TXD1-pinnen?
Vilket programmspråk skriver du i??
Har du testat kodexemplena på s152-153 i databladet?
Har du kommit ihåg att göra om TXD1(PD3) till utgång i DDRD-registret?
Har du ställt in rätt baudrate med tanke på din oscillator, du har väl koll på vilken du använder. Default är ju oftast den interna RC-oscillatorn med ckdiv8 satt.
Har du testat med oscilloskåp att det händer något på TXD1-pinnen?
Stinrew, du kanske är någonting på spåret.
Jag använder i princip exempelkod från databladet, det är dock ofulständigt.
Tex ställer det inte om TXD i DDRD till utgång. Jag tog förgivet att när man initierar uarten görs sådana saker.
Läste oxå i någon "tutorial" att om man inte sätter bits, stopbits, paritet etc så används 8n1, viket sätts när uart initieras. kanske inte häller stämmer då
Får testa
Jag använder i princip exempelkod från databladet, det är dock ofulständigt.
Tex ställer det inte om TXD i DDRD till utgång. Jag tog förgivet att när man initierar uarten görs sådana saker.
Läste oxå i någon "tutorial" att om man inte sätter bits, stopbits, paritet etc så används 8n1, viket sätts när uart initieras. kanske inte häller stämmer då
Får testa
> Läste oxå i någon "tutorial"
Lite inte på dom.
> att om man inte sätter bits, stopbits, paritet etc
Gör det ! Sätt det som *du* vill ha det.
> Jag tog förgivet...
Gör inte det...
Generellt gäller att du ska/bör specifikt sätta allt som är rellevant
för din applikation och inte lita på power-on eller default värden.
Finns ju absolut ingen anledning att *inte* göra det...
Lite inte på dom.
> att om man inte sätter bits, stopbits, paritet etc
Gör det ! Sätt det som *du* vill ha det.
> Jag tog förgivet...
Gör inte det...

Generellt gäller att du ska/bör specifikt sätta allt som är rellevant
för din applikation och inte lita på power-on eller default värden.
Finns ju absolut ingen anledning att *inte* göra det...
> jag VILL ha 8n1
Och ? SÄTT det då.
> lyckades dock inte sätta de inställningarna,
I så fall är det väldigt osannolikt att de även är default...
En annan sak...
Om man ska visa kod som man har problem med på ett forum
så är det väldigt viktigt att *inte* förlita som på defaults. Som sagt,
sätt *ALLT* som du vill ha det. Annars får du direkt motfrågor
om "har du tänkt på det-och-det ?". Visa i koden att du faktiskt
har tänkt på allt (om du nu har det
)...
> och ev post kodsnutten min
Eventuellt ?
Om det ska vara någon mening med tråden så bör du nog göra det.
Och ? SÄTT det då.

> lyckades dock inte sätta de inställningarna,
I så fall är det väldigt osannolikt att de även är default...
En annan sak...
Om man ska visa kod som man har problem med på ett forum
så är det väldigt viktigt att *inte* förlita som på defaults. Som sagt,
sätt *ALLT* som du vill ha det. Annars får du direkt motfrågor
om "har du tänkt på det-och-det ?". Visa i koden att du faktiskt
har tänkt på allt (om du nu har det

> och ev post kodsnutten min
Eventuellt ?
Om det ska vara någon mening med tråden så bör du nog göra det.
Tänk vad mycket enklare det hade varit om du svarat på samtliga frågor jag ställde i mitt förra inlägg istället för bara ett par av dom.
För att få en stoppbit istället för två tar du helt enkelt bort "(1<<USBSn) |"-delen av exempelkoden.
Och lägg upp hela koden som du försöker med, för mesta chans till hjälp.
För att få en stoppbit istället för två tar du helt enkelt bort "(1<<USBSn) |"-delen av exempelkoden.
Och lägg upp hela koden som du försöker med, för mesta chans till hjälp.
vad jag vill göra
sända char 'g' , flöde 8n1
koden relevanta bitarna
#define BAUDRATE 9600
#define UBRRVAL ((F_CPU/(BAUDRATE*16UL))-1)
DDRD = 0b01111111; //7 0 sätter alla pins till utgång utom pd7
//Set baud rate
UBRR1L=UBRRVAL; //low byte
UBRR1H=(UBRRVAL>>8); //high byte
//Set data frame format: asynchronous mode,no parity, 1 stop bit, 8 bit size
//UCSR1C=(1<<URSEL)|(0<<UMSEL)|(0<<UPM1)|(0<<UPM0)| (0<<USBS)|(0<<UCSZ2)|(1<<UCSZ1)|(1<<UCSZ0);
UCSR1C = (3<<UCSZ10);
//Enable Transmitter and Receiver
UCSR1B=(1<<RXEN1)|(1<<TXEN1);
/* Wait for empty transmit buffer */
while ( !( UCSR1A & (1<<UDRE1)) );
/* Put data into buffer, sends the data */
UDR1 = 'g';
sända char 'g' , flöde 8n1
koden relevanta bitarna
#define BAUDRATE 9600
#define UBRRVAL ((F_CPU/(BAUDRATE*16UL))-1)
DDRD = 0b01111111; //7 0 sätter alla pins till utgång utom pd7
//Set baud rate
UBRR1L=UBRRVAL; //low byte
UBRR1H=(UBRRVAL>>8); //high byte
//Set data frame format: asynchronous mode,no parity, 1 stop bit, 8 bit size
//UCSR1C=(1<<URSEL)|(0<<UMSEL)|(0<<UPM1)|(0<<UPM0)| (0<<USBS)|(0<<UCSZ2)|(1<<UCSZ1)|(1<<UCSZ0);
UCSR1C = (3<<UCSZ10);
//Enable Transmitter and Receiver
UCSR1B=(1<<RXEN1)|(1<<TXEN1);
/* Wait for empty transmit buffer */
while ( !( UCSR1A & (1<<UDRE1)) );
/* Put data into buffer, sends the data */
UDR1 = 'g';
> avrs PD3 -> maxim232 ben 11(TTL input).
Alltså MAX232'ans TTL/CMOS ingång nummer *ETT* !!
> maxim232 ben 7(rs-232outpu) -> PC:s RXD pinne...
Alltså MAX232'ans RS232 utgång nummer *TVÅ* !!
Hur ska det kunna fungera ?
Antingen 11 -> 14 *eller* 10 -> 7.
EDIT:
Om din "koppling" hade varit med i *första* inlägget,
så hade mycket tid sparats...
Se gärna även :
http://elektronikforumet.com/forum/viewtopic.php?t=6057
Alltså MAX232'ans TTL/CMOS ingång nummer *ETT* !!
> maxim232 ben 7(rs-232outpu) -> PC:s RXD pinne...
Alltså MAX232'ans RS232 utgång nummer *TVÅ* !!
Hur ska det kunna fungera ?
Antingen 11 -> 14 *eller* 10 -> 7.
EDIT:
Om din "koppling" hade varit med i *första* inlägget,
så hade mycket tid sparats...
Se gärna även :
http://elektronikforumet.com/forum/viewtopic.php?t=6057
testat lite med koden.
komentarsmarkerade enablingen av TX och RD och testade att göra ett litet program som lade ut en 0 resp 1:a på PD3 beroende på en annan pinnes input (0 eller 1:A)
Det funkar, den alternerar som den skall, enablar jag raden som som kör igång RX och TX i koden går PD3 up på 5volt och stannar där, PORTD = PORTD | 0b00001000; eller PORTD = PORTD & 0b11110111; byter nu inte längre mellan 0 alt 5 på pd3 som det gjorde när RX/TX ej var enablat.
kan man dra slutsats att uC PD3 är hel och att UART funktionaliteten dras igång korekt?
komentarsmarkerade enablingen av TX och RD och testade att göra ett litet program som lade ut en 0 resp 1:a på PD3 beroende på en annan pinnes input (0 eller 1:A)
Det funkar, den alternerar som den skall, enablar jag raden som som kör igång RX och TX i koden går PD3 up på 5volt och stannar där, PORTD = PORTD | 0b00001000; eller PORTD = PORTD & 0b11110111; byter nu inte längre mellan 0 alt 5 på pd3 som det gjorde när RX/TX ej var enablat.
kan man dra slutsats att uC PD3 är hel och att UART funktionaliteten dras igång korekt?