PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : UART/USART vom ATMega32 will einfach gar nicht



Bamboocha
31.05.2010, 15:19
Hallo liebe Community,
ich bin noch blutiger uController Anfänger und brauche langsam mal ein Erfolgserlebniss, vielleicht könnt ihr mir ja weiterhelfen. (Ja Google, Forum suche, etc. hab ich zu hauf schon durchwälzt)

Erstmal Die Eckdaten
- ATMega 32
- STK 500
- AVR Studio 4.x SP2
- Hyperterminal
- WINAVR für die Makefile

Ich versuche dezeitig meinen uC mit Hyperterminal reden zu lassen. Auf den uC ist folgender c-Code (Geklaut^^) ich habe auch schon etwas selbstgeschriebenes probiert mit gleichem Nichterfolg:


#include <avr/io.h>

void USART_Init (void)
{
#if F_CPU < 2000000UL
UCSRA = (1 << U2X);
UBRRL = F_CPU / (8 * 9600UL) - 1;
#else
UBRRL = F_CPU / (16 * 9600UL) - 1;
#endif
/*Enable reciever and transmitter */
UCSRB = (1<<RXEN) | (1<<TXEN) ;
/*Set Frame format :8data, 2stop bit */
UCSRC = (1<<URSEL) | (1<<USBS) | (3<<UCSZ0) ;
}

void USART_Transmit ( unsigned char data )
{
/*Wait for empty transmit buffer */
while ( !(UCSRA & (1<<UDRE)) ) ;
/* Put data into buffer, sends data */
UDR = data ;
}

int main (void)
{
USART_Init();

while(1)
{
USART_Transmit ("O");
USART_Transmit ("K");
}
}


Zu meinen Einsellungen. Beginnend mit dem Einfachsten.

HT steht auf 9600 Boud mit 8Bits 2 Stops und ohne Parity und ich habe nur einen COM-Port :^o

STK500 uC sitzt drin ist programmierbar (ISP freq 54khz) und ISP6 auf SPROG3, RxD und Txd sind auf PD0 und PD1 gebrückt und ich steck das COM Kabel zum Ausleseversuch um.

Jetzt zum AVR Studio, Programmieren (ISP Frq 57khz) etc funktioniert, unter dem reiter Fuses ist der Haken bei Ckopt gesetzt und bei Sut_Cksel steht auf 4 Mhz interner Oszi, da kein externer Oszi vorhanden. Unter dem Reiter Advanced steht unter Oscillator Calibration Byte 4 Mhz

Tortz diverser Variationen sehe ich auf dem HT leider gar nix, bis auf wenn ich dem STK den Strom wegnehme und danach wieder gebe gibt er mir eine '00' aus. Wenn es wenisgtens 2 Zeichen wären könnte ich es ja auf die Frequenz oder ähnliches schieben, aber so bekomm ich rein gar nix. Irgendwo muss ich wohl einen grundlegenden Fehler machen, aber wo?
Bitte helft mir mit all euren Anregungen und Ideen.

Vielen Dank
Bamboocha

Hubert.G
31.05.2010, 16:06
Bei mir läuft es mit einer kleinen Änderung:
USART_Transmit ('O');
USART_Transmit ('K');
USART_Transmit (' ');
Keine Anführungsstriche in den Klammern.
Wozu brauchst du WINAVR für das Makefile, das AVR-Studio macht sich das doch selbst.

Bamboocha
02.06.2010, 13:49
Mhh, hast recht es müssen ' und nicht " sein. aber er macht bei mir immer noch nix :(
Muss ich den uC noch extra einrichten? Fehlt noch eine Initialisierung oder reicht die USART_Init?

P.S. Jip makefile brauch ich hier wirklich nicht...danke nochmal

Zur Zeit will er auf dem SDK500 nichtmal

#include <avr/io.h>
#include <util/delay.h>



int main (void)
{
DDRA = 0xff; // Data Direction auf 1 -> PD0 - PD7 Ausgang


while(1)
{
PORTA = 0x01;
_delay_ms(2000);
PORTA = 0x02;
_delay_ms(2000);
PORTA = 0x04;
_delay_ms(2000);
PORTA = 0x08;
_delay_ms(2000);
PORTA = 0x10;
_delay_ms(2000);
PORTA = 0x20;
_delay_ms(2000);
PORTA = 0x40;
_delay_ms(2000);
PORTA = 0x80;
_delay_ms(2000);
PORTA = 0xff;
_delay_ms(2000);
PORTA = 0x00;
_delay_ms(2000);

}
return 0;
}

Hubert.G
02.06.2010, 13:56
Ich habe deinen Code bis auf die Änderung übernommen, also keine weitere Initialisierung.
Hast du schon mal auf RxD und TxD eine Brücke gesteckt, dann sollte im HT ein Echo zurückkommen wenn du was eingibst.
Oder auch nur mal den Stecker gedreht.

Bamboocha
02.06.2010, 14:45
Gebrückt habe ich schon, das Echo kommt auch an. Dabei ist mir nur aufgefallen, dass wenn ich mehr als 8 Zeichen schicke 1 davon als schwachsinn wieder zurückkommt.
Ich bin mittlerweile soweit, dass wenn das Programm richtig ist und die R232 Verbindung bis auf das Board kommt, dass irgendwas mit der uC Verbindung zu den steckpins nicht stimmt, was denke ich durch das nicht funktionierende LED-Test Programm nur bestätig wird.
Kann ich da etwas übersehen haben?

Richard
02.06.2010, 16:49
Hallo liebe Community,


Zu meinen Einsellungen. Beginnend mit dem Einfachsten.

HT steht auf 9600 Boud mit 8Bits 2 Stops und ohne Parity und ich habe nur einen COM-Port :^o


Vielen Dank
Bamboocha

Hmm, üblich sind eher8,n,1..? und im Hyperterminal Flussteuerung !keine!wählen.
Die Pins am Pord sollen nicht unbedingt gebückt werden, eher die auf den
SDK 500. Der PC mit hyperterminal muß! mit der 2. com schnittstelle
vom stk 500 verbunden werden, die 1. 232 ist nur zum Datentausch mit
den STK 500 selber! Pd0/1 muss mit rdx/tdx vom stk 500 verbunden
werden. Das Programm kann ich nicht nachvollziehen (Bascommnutzer).
Habe aber mit diversen Prozessoren noch nie RS 232 Probleme gehabt.

Gruß Richard
[/quote]

Hubert.G
02.06.2010, 17:49
Es könnte nur noch sein, das der Kontroller defekt ist glaube ich eher nicht, das die Taktfrequenz nicht stimmt.
Im AVR-Studio hast du das aber im Klartext stehen.

Bamboocha
04.06.2010, 10:25
Suppa...es geht...gleiche Einstelllungen wie beim letzten mal und hatte gleich wirrwar über den USART bekommen. Dann noch festgestellt das die F_CPU auf 8 Mhz stand schnell die Baudrate auf 4800 runtergedreht und es funktioniert. Ich danke euch allen für eure Unterstützung. Bis zum nächsten Problem dann =D>

wkrug
04.06.2010, 11:21
Was mir noch aufgefallen ist - Du hast UBRRH nicht gesetzt.
Normalerweise ist der Wert ja 0, aber wenn da mal was drinstand, wird es nicht mehr geändert und dein Programm kann zicken machen.