Versuchs mal in Bascom mit Print und Input
Hi!
Ich habe verzweifelt versucht mit meinem RN-Control mit Atmega32 über RS232 zu kommunizieren. Ich habe viele Möglichkeiten ausprobiert, Tutorials gelesen, aber nix zu laufen gebracht.
wichtig ist mir, dasss das ganze in C/C++ programmiert ist. hat mir da vielleicht wer was?
Gruß und thx
ciruz
Versuchs mal in Bascom mit Print und Input
Tolle Antwort Gast....
@ciruz, was hast Du bis jetzt versucht?
schick mal irgendein Code, dann können wir gucken, was da Faul ist.
Gruß Sebastian
Linus TorvaldSoftware is like s e x: its better when its free.
Hi!
Leider lag das Wekzeug brach übers lange Wochenende...
Hier ist einer der Codes mit denen ichs versucht hab:
Ich bin mir nicht sicher ob die Register alle korrekt benannt sind. Ansonsten hab ich kein Plan warums net läuft...Code:/**************************************************************************** UART.c ------ Übungsprojekt zum Empfang von Daten mit dem UART. Eine LED an Pin 0 von Port C soll gesteuert werden beim Empfang folgender Zeichen: '1' - LED ein. '0' - LED aus. Autor: Christian Schifferle Datum: November 2002 Software: AVR-GCC needed ****************************************************************************/ #include <io.h> // Wir brauchen Zugriff auf die I/O's des Controllers #define F_CPU 8000000 /* 8Mhz */ #define UART_BAUD_RATE 9600 /* 9600 baud */ // Berechnung des Inhalts des UBBR-Registers #define UART_BAUD_SELECT (F_CPU/(UART_BAUD_RATE*16l)-1) // Datentypdefinitionen typedef unsigned char BYTE; typedef unsigned short WORD; int main (void) /**************************************************************************** Hier ist der Programmeinstiegspunkt. */ { /* UART Control Register laden. Wir verwenden (noch) keine Interrupts. Hier wollen wir nur empfangen, also wird nur das Receiver Enable Flag gesetzt. */ outp ((1 << RXEN), UCSRB); /* Baudrate einstellen */ outp ((BYTE) 0x00, UBRRH); outp ((BYTE) UART_BAUD_SELECT, UBRRL); // Port B als Ausgang konfigurieren outp (0xff, DDRC); PORTC=0xff; // Hier machen wir einmal etwas anderes zur Realisierung der // Endlosschleife. Wir setzen zu Beginn der Schleife ein Label. // Am Schleifenende springen wir direkt zu diesem Label. // Nicht schön, aber unheimlich schnell. LOOP: // Prüfen, ob ein Zeichen empfangen wurde. if (inp (UCSRA) & (1 << RXC)) { // Bit RXC im USR gesetzt ? switch (inp (UDR)) { // Datenregister auslesen case '0': // LED einschalten sbi (PORTC, PINC0); break; case '1': // LED ausschalten cbi (PORTC, PINC0); break; default: // Bei allen anderen Zeichen nichts tun break; } } goto LOOP; } /* end of main */
thx schonmal
gruz ciruz
Hi,
Hier Codes für den Mega32 UART:
hier drei Funktionen (uart.c):
UART_init(); Den UART Einschalten, hier wird auch der Empfangsinterrupt aktiviert. Dein Hauptprogramm muss dann so aussehen:Code:void UART_init(void){ UBRRL |= (uint8_t) UART_BAUD_SELECT; UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN); UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); } void UART_transmit(uint8_t c){ while(!(UCSRA & (1<<UDRE))); UDR = c; } void UART_transmit_string(uint8_t *string){ while(!(UCSRA & (1<<UDRE))); while( *string){ UART_transmit (*string++); } }
Code:// AVR-Includes #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> // Programm-Includes #include <uart.c> // Oder die obigen Funktionen hinschreiben... SIGNAL( SIG_UART_RECV ) { /*hier was beim Enpfang geschehen soll*/ } int main (void){ sei(); // Interrups global aktivieren UART_init(); // UART init funktion ausführen while(1){ /*HAUPTSCHLEIFE*/ } }
Gruß,
Franz
Vielen Dank schonmal, aber leier kriege ich auch das nich zum laufen...
Wo setzt du denn das Dateformat? Üblich ist 8N1, das wird nirgends eingestellt.
Disclaimer: none. Sue me.
ok, und wie stelle ich das ein?
http://www.atmel.com/dyn/resources/p...ts/doc2503.pdf
Seite 140 bis 168 befasst sich mit dem USART (~UART);
Auf Seite 162 und 163 ist CONTROL/STATUS Register C beschrieben.
Gruß,
Franz
Dank auch an dich, aber mit dem Datenblatt hatte ich michauch bereits beschäftigt.
Hat denn keiner ein in C geschriebenes Prog für RN-Control das einfach läuft?
Ich habe auch schon mehr als den oben geposteten Code probiert, ich kriegs aber einfach nicht auf die Reihe in C. In Bascom hab ichs zwar hinbekommen, allerdings wär mir C halt schon lieber...
Gruß
Lesezeichen