- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 8 von 8

Thema: UART Problem - keine Daten kommen an

  1. #1
    Neuer Benutzer
    Registriert seit
    08.01.2006
    Alter
    36
    Beiträge
    4

    UART Problem - keine Daten kommen an

    Anzeige

    Praxistest und DIY Projekte
    Hallo!
    Ich habe einen RN-Control mit Atmega32. Mein Problem ist nun, dass ich mit dem Program (siehe unten) das immer ein 'X' verschicken soll nichts empfange. Ein anderes Programm (das Interrupts) verwendet funktioniert ohne Probleme.
    (Ein Hardwareschaden oder falscher Anschluss kann also ausgeschlossen werden.) Ich verwende auch die gleiche Konfiguration wie im Testprogram (nur ohne Interrupt). Falsche Baudrate kann also auch ausgeschlossen werden.
    Aber woran liegt es nun?

    Code:
    #include <avr/io.h>
    
    void init_uart(void);
    void timer (void);
    void uart_putc(char c);
    
    void init_uart (void)
    {
    	UBRRH = 0;
    	UBRRL = 207;
    	UCSRA = 1<<U2X;
    
    	UCSRB = (1<<TXEN);
    
    	UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
    }
    
    void uart_putc(char c)
    {
    	while(!(UCSRA & (1<<UDRE)));
    	UDR = c;
    }
    
    void timer (void)
    {
     	TCNT0 = 0;
     	TCCR0 = (1<<CS00)|(1<<CS02);
     }
    
    int main (void)
    {
    	uint8_t ticks = 0;
    	init_uart();
    	timer();
    	
    	for (;;)
    	{
    		if (TCNT0 > 20)
    		{
    			ticks++;
    			TCNT0 = 0;
    		}
    		if (ticks == 128)
    			uart_putc('X');
    	}
    }
    Danke

    blu3

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.09.2004
    Alter
    39
    Beiträge
    647
    Hi,

    baue mal das hier in deinen code ein:

    Code:
    void send_string(char wort[])
    {
    unsigned int index=0;
    while(wort[index] != '\0')
    {
    USART_Transmit(wort[index]);
    index++;
    }
    return;
    }

    die daten sendest du dann mit send_string("X");

    Das müsste funktionieren

    Kann es sein das du vergessen hast die baudrate usw. mit anzugeben in deinem programm???
    Irgendwie sieht das unvollständig aus.

    MFG DanielSan
    Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]

  3. #3
    Neuer Benutzer
    Registriert seit
    08.01.2006
    Alter
    36
    Beiträge
    4
    Hallo DanielSan!
    Daran kann es nicht liegen. Deine Funktion ist nur ein nettes "Frontend" für eine Funktion wie (bei mir) uart_putc(char c) um ganze Strings zu versenden.
    Mal ganz davon abgesehen, dass ich hierfür Pointerarithmetik für sinnvoller erachte.

    blu3

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.09.2004
    Alter
    39
    Beiträge
    647
    Tja bin halt neu auf dem gebiet und ich habe es so gelöst und es funktioniert.

    Aber hast du mal versucht mit uart_putc('2');
    was zu senden? normalerweise müsste doch jetzt ein smiley ankommen.
    MFG
    Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]

  5. #5
    Neuer Benutzer
    Registriert seit
    08.01.2006
    Alter
    36
    Beiträge
    4
    hm. wieso sollte da ein Smiley ankommen? Ich sende ein Zeichen im ASCII Zeichensatz und lese es auch als solches wieder ein.

    EDIT: Das Problem ist, dass einfach nichts ankommt. Ein hexdump /dev/ttyS0 zeigt absolut nichts an.

    blu3

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.09.2004
    Alter
    39
    Beiträge
    647
    weil das bei mir so ist aber ich habe nicht richtig hingeguckt ich sende die zeiche etwas anders aber auch mit nem atmega128

    MFG
    Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]

  7. #7
    Neuer Benutzer
    Registriert seit
    08.01.2006
    Alter
    36
    Beiträge
    4
    Juhuu. Es funktioniert. Ich hab aus Spaß ein "uart_putc('\n');" eingefügt und jetzt kommt alles an. Aber warum muss ich erst noch ein '\n' senden bevor ueberhaupt irgendetwas ankommt? Und was wenn ich 1000 Zeichen senden will bei denen kein '\n' vorkommen darf? Muss ich ein eigenes Protokoll implementieren?

    blu3

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    11.11.2005
    Beiträge
    321
    man muss beide seiten verstehen.
    das terminal und den avr. ihr arbeitetet immer zu hastig. langsam und mit verstand muss es gehen. wahrscheinlich hast du dich noch nicht mit dem pc-empfang und dem protokoll auseinandergesetzt.

    wenn ihr euch mehr konzentrieren würdet, kämen weniger fehler zustande.

    Castle

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress