avr at90sub162 UART

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
gripner
Inlägg: 1169
Blev medlem: 4 december 2007, 14:47:39
Ort: Lidingö

avr at90sub162 UART

Inlägg av gripner »

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.
Användarvisningsbild
Stinrew
Inlägg: 954
Blev medlem: 20 augusti 2006, 03:14:41
Ort: Motala
Kontakt:

Inlägg av Stinrew »

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?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> är det någon som har en liten smidig kodsnutt...

Varför inte göra tvärtom, visa vad *DU* har gjort...
Det är du som har problemet och det är du som får bjuda till.
gripner
Inlägg: 1169
Blev medlem: 4 december 2007, 14:47:39
Ort: Lidingö

Inlägg av gripner »

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
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> 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...
gripner
Inlägg: 1169
Blev medlem: 4 december 2007, 14:47:39
Ort: Lidingö

Inlägg av gripner »

jag VILL ha 8n1 därav lät det bra tyckte jag.

lyckades dock inte sätta de inställningarna, 8n2 gick därimot bra, va nog någon blunder någonstans

hemma nu iaf, så om jag får tillfälle kanske jag kan testa och ev post kodsnutten min
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> 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.
Användarvisningsbild
Stinrew
Inlägg: 954
Blev medlem: 20 augusti 2006, 03:14:41
Ort: Motala
Kontakt:

Inlägg av Stinrew »

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.
gripner
Inlägg: 1169
Blev medlem: 4 december 2007, 14:47:39
Ort: Lidingö

Inlägg av gripner »

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';
gripner
Inlägg: 1169
Blev medlem: 4 december 2007, 14:47:39
Ort: Lidingö

Inlägg av gripner »

kopplat


avrs PD3 -> maxim232 ben 11(TTL input).
maxim232 ben 7(rs-232outpu) -> PC:s RXD pinne i dsub9:an
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> 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
gripner
Inlägg: 1169
Blev medlem: 4 december 2007, 14:47:39
Ort: Lidingö

Inlägg av gripner »

är 10 - 7 jag använder, vette sjuttingen varför jag skrev 11, har väll stirrat mig blind och galen
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Jaha... :roll: :-)
Jag hoppas du förstår hur svårt du gör det för *oss*... :-)
gripner
Inlägg: 1169
Blev medlem: 4 december 2007, 14:47:39
Ort: Lidingö

Inlägg av gripner »

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?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK.
Det verkar vara något som saknas för att den ska börja sända,
så att säga. Hårdvaran utanför AVR'en verkar OK.

> går PD3 up på 5volt och stannar där,

Och RS232 signalen går till (ca) -10 V ?
Eller något däromkring...
Skriv svar