IMHO ist das & 0x0f beim Setzen der Baudrate nicht korrekt, weil da die Bits 4-7 flöten gehen.
Hallo Zusammen,
ich bin jetzt auf eure Rate angewiesen, seit 3 Tagen versuche ich, eine Zechenkette in Hyperterminal zu zeigen, es hat nicht geklappt.
ich weiss nicht, was ich falsch mache.
Ich programmiere Atmega128, hier ist mein CodeCode:#include <avr/io.h> #include <inttypes.h> #include <avr/interrupt.h> #include <avr/signal.h> #define F_CPU 16000000UL #define BAUD 9600UL #define UBRR_BAUD ((F_CPU/(16UL*BAUD))-1) volatile uint8_t zeichen; volatile uint8_t buffer; // USART initialisieren void uart_init0(void) { // Baudrate einstellen (Normaler Modus) UBRR0H = (uint8_t) (UBRR_BAUD>>8); UBRR0L = (uint8_t) (UBRR_BAUD & 0x0F); UCSR0B=0; // Aktivieren von receiver und transmitter UCSR0B = (1<<RXCIE0)|(1<<RXEN0)|(1<<TXEN0); // Einstellen des Datenformats: 8 Datenbits, 1 Stoppbit UCSR0C=0; UCSR0C = (1<<UMSEL0)|(1<<UCSZ01)|(1<<UCSZ00); } SIGNAL(SIG_UART0_RECV){ zeichen= UDR0; } void UART_SendByte(uint8_t buffer){ while ( !( UCSR0A & (1<<UDRE0))); UDR0=buffer; } void putstring(char *s){ while (*s!=0){ UART_SendByte(*s); *s++; } } int main(void) { DDRE=0xFF; PORTE=0xFF; uart_init0(); sei(); while (1){ if(zeichen==0x0D){ putstring("Hallo Welt\n"); } } }
IMHO ist das & 0x0f beim Setzen der Baudrate nicht korrekt, weil da die Bits 4-7 flöten gehen.
Disclaimer: none. Sue me.
danke für die schnelle Antwort, ich habe ohne &0x0F probiert, hat es nicht geklappt, prblem ist ich bekomme nichts zurück.
danke
In putstring muss es s++ heissen, nicht *s++ ... obwohl, das sollte egal sein...
Es wäre ganz hilfreich, wenn du rausfinden würdest, ob der receive-Teil oder der Transmit-Teil nicht geht. Das macht die Fehlersuche dann einfacher.
Du kannst zB das "Hallo Welt immer ausgeben (anstatt als Reaktion) und dann ein while(1); Nach dem Reset sollte der µC dann einen String zum PC schicken.
Disclaimer: none. Sue me.
Hi,
Sender und emfänger sind Fehlerfrei, ich kann schon ein Zeichen senden und emfangen. Problem liegt nur bei Zeichenkette.
Wenn du möchtest, daß man dir hier hilft, ist es hilfreich möglichst genau zu beschreiben, was nicht funktioniert.
"Problem bei Zeichenkette" ist nicht wirklich hilfreich...
Disclaimer: none. Sue me.
ich möchte, wenn ich "Hallo Welt" als Zeichenkette an Atmega128 sende, sollte es an Hyperterminal gezeigt werden.
es gibt nicht viel zu erklären.
danke
Hallo Zusammen,
ich bin selber auf die Lösung gekommen, einfach UMSEL=0 setzen.
es wird synchrone Verbindung erstellt, d.h keine Kopfschmerzen mit dem Baudrategenauigkeit.
vielen Dank für Alle, die sich bemüht besonderes SprinterSB
Güss majid
Hallo chouifi,
kannst du mal deinen neuen Code posten oder noch besser, deinen ganzen Ordner als .rar oder .zip rausgeben.
Wäre echt nett, da ich langsam mit C und uc anfangen will. Es ist äußerst günstig, wenn man eine Basis hätte (makefile, Quelltext, usw.), sodass man darauf aufbauen kann. Ich will das Ganze mit einem Atmega32 testen
Es verwirrt mich schon ein bisschen, dass man mehrer Header und Quelltext Dateien nutzen kann und zudem noch ein makefile benötigt. Bei Bascom schreibt man alles in eine Datei/Programm.
Gruß
Stefan
Lesezeichen