Hi, brauche dringend Hilfe! Weis echt nicht wo das Problem liegt... denke aber ehr beim Code oder beim Terminalprogramm, Hardware müsste stimmen. Wär cool fall irgendjemand von euch mal zeit hätte und mein Code durch gehn könnte ob ich irgendwo ein Fehler gemacht habe. Benutze den Atmeg88 mit eim 18,432 Mhz Quarz habe das Programm laut Datenblatt und Programm Beispiel vom GCC-Tutorium geschrieben. Und als Terminal Programm habe ich Hterm benutzt und Hyperterminal (obwohl ich da nicht so ganz durch geblickt habe) Stelle immer 9600 Baud und 1 stopbit zeigt aber gar nichts an. Hoffe ihr könnt mir helfen. Grüße Pete Hier mein ProgrammCode wusste leider nicht wie ich ihn als solchen darstellen kann: // Festlegung der Quarzfrequenz #define F_CPU 18432000UL // Include von Header-Dateien #include <avr/io.h> #include <stdbool.h> #include <avr/interrupt.h> #include <util/delay.h> #include <stdio.h> #include <stdlib.h> #include <string.h> // Festlegung der Baudrate #define BAUD 9600UL #define MYUBRR F_CPU/16/BAUD-1 #define SET_BIT(PORT,BIT) ((PORT) |= (1<<(BIT))) // macro to set bits #define CLEAR_BIT(PORT,BIT) ((PORT) &= ~(1<<(BIT))) // macro to clear bits void USART_Init(void); int USART_Transmit_c(unsigned char c); // Hauptprogramm ============================================================== int main( void ) { unsigned char c; USART_Init(); while(1) { for (uint8_t i=0; i<=9; ++i) { c = i + '0'; USART_Transmit_c(c); } _delay_ms(1000); } } // Unterprogramme ========================================================== // UART Initalisieren================================= void USART_Init(void) { CLEAR_BIT(DDRD,0); CLEAR_BIT(PORTD,0); UBRR0H=0x00; UBRR0L=MYUBRR; UCSR0A |= (0<<RXC0) | (0<<TXC0) | (0<<UDRE0) | (0<<FE0) | (0<<DOR0) | (0<<UPE0) | (0<<U2X0) | (0<<MPCM0); UCSR0B |= (0<<RXCIE0) | (1<<TXCIE0) | (0<<UDRIE0) | (0<<RXEN0) | (1<<TXEN0) | (0<<UCSZ02) | (0<<RXB80) | (0<<TXB80); // Set frame format: 8data, 1stop bit UCSR0C |= (0<<UMSEL01) | (0<<UMSEL00) | (0<<UPM01) | (0<<UPM00) | (0<<USBS0) | (1<<UCSZ01) | (1<<UCSZ00) | (0<<UCPOL0); } // Zeichen an PC versenden================================= int USART_Transmit_c(unsigned char c) { /* Wait for empty transmit buffer */ while ( !( UCSR0A & (1<<UDRE0)) ) { } /* Put data into buffer, sends the data */ UDR0 = c; return 0; }
Such mal hier im Forum. Das Problem ist schon erschöpend behandelt worden. Ich rate Dir nicht davon auszugehen, das die Hardware in Ordnung ist.
Hi > UCSR0A |= (0<<RXC0) | (0<<TXC0) | (0<<UDRE0) | (0<<FE0) | >(0<<DOR0) | (0<<UPE0) | (0<<U2X0) | (0<<MPCM0); Absolut sinnlos. > UCSR0B |= (0<<RXCIE0) | *(1<<TXCIE0)* | (0<<UDRIE0) | (0<<RXEN0) | >(1<<TXEN0) | (0<<UCSZ02) | (0<<RXB80) | (0<<TXB80); Wo ist deine Interruptroutine? MfG Spess
Pete schrieb: > Und als Terminal Programm habe ich Hterm benutzt und Hyperterminal > (obwohl ich da nicht so ganz durch geblickt habe) Stelle immer 9600 Baud > und 1 stopbit zeigt aber gar nichts an. Als Erstes machst Du mal eine Brücke zwischen Pin 2 und 3 (RxD und TxD) am Kabel zum PC (also ohne Deinen µC). Dann musst Du die mit der Tastatur gesendeten Zeichen am Bildschirm sehen (Echo). Wenn nicht: Terminalprogramm falsch konfiguriert oder sonst was am PC falsch oder kaputt :-((
Danke für eure Hilfe! Das mit dem Echo war ne Klasse Idee! Mein Fehler war es das ich die drähte für Txd und Rxd von einer platine zur anderen gekreutzt habe und nicht dran gedacht hab das ich die auf der anderen platine auch schon gekreutzt habe -.- naja jetzt läufts! Danke noch mal! Grüße Pete
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.