-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: RS232 mit AT90CAN128 Keine Verbindung

  1. #1

    RS232 mit AT90CAN128 Keine Verbindung

    Anzeige

    Hallo mal wieder,

    ich habe folgendes Problem. Ich bekomme keine Verbindung zum Hyperterminal. Ich hab am Oszi den Tx und Rx Ausgang gemessen und bekomme an einem 0 V und an dem anderen ca. 9V dauernd raus. An den Tx und Rx Ausgängen des Controllers messe ich 5 V dauernd. Ich habe im Forum leider keinen Thread gefunden, der mein Problem lösen konnte.
    Zur Hardware: Ich verwende einen AT90CAN128, bei dem ich auf die TX1 und Rx1 gehe (Tx0 und Rx0 ist vom ISP belegt!). Ich programmiere in C mit dem AVRSTudio. Meine Baudrate ist 9600 und ich verwende einen Quarzoszillaotr mit einer Frequenz von 7372800 Hz.

    Ich habe die Init aus dem Datenblatt übernommen, werd aber nicht wirklich schlau daraus. Ich habe meinen Code des Headerfile mal angehängt.

    Code:
    #include <avr/io.h>
    #include <util/delay.h>
    
    
    /*### Senden per USART - RS232-Kommunikation ###*/
    
    void USART1_Init (void)
    {
    /* Set baud rate */
    UBRR1H = 0;
    UBRR1L = 47;
    /* Set frame format: 8data, no parity & 2 stop bits */
    UCSR1C = (0<<UMSEL1) | (0<<UPM1) | (1<<USBS1) | (3<<UCSZ1);
    /* Enable receiver and transmitter */
    UCSR1B = (1<<RXEN1) | (1<<TXEN1);
    }
    
    
    void USART1_Transmit (unsigned char data)
    {
    	while(!(UCSR1A & (1<<UDRE1))) 
    	{
    	}
    	
    	UDR1 = data; 
    }
    
    
    
    
    void uart_puts(char *s)
    {
    while(*s)
    	{     
    	USART1_Transmit(*s);	
    	s++;
    	}
    }
    Wäre super wenn mir jemand helfen könnte, ich bin am verzweifeln.

    LG Anna

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    48
    Beiträge
    524
    Hallo,

    warum schreibst du nicht, was dich so sicher macht, dass der fehler in den Codeschnipseln liegt?

    Wir brauchen den ganzen Code. Bzw eine minimale compilierbare Version die den Fehler zeigt.

    Gruß

    Jens

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied Avatar von drew
    Registriert seit
    06.04.2005
    Beiträge
    150
    Hallo,
    ich hab gerade einen AT90CAN64 vor mir. Leider hab ich aber keine RS232 drauf.
    Da sich an den Pins nichts tut und die init für mich recht vernünftig ausschaut. Kann's eigentlich nur noch daran liegen, dass die Pins irgendwie falsch konfiguriert sind. Hast Du da schon mal geschaut?
    Vielleicht kannst Du auch zum testen mal die andere USART verwenden?

    drew


  4. #4
    Hallo nochmal,

    Kann's eigentlich nur noch daran liegen, dass die Pins irgendwie falsch konfiguriert sind.
    @drew Was meinst du damit?Wie soll ich die Pins konfigurieren??

    Wir brauchen den ganzen Code.
    @MCJenso Hab mal noch die C-Datei angehängt. Sonst hab ich außer der oben genannten Headerdatei nichts . Und zwar laß ich immer erst 2 LED blinken, bevor ich was rausschick. Hab es gemacht um zu überprüfen ob die Endlosschleife auch richtig läuft!

    Code:
    #include <stdlib.h>
    #include <avr/io.h>
    #include <avr/pgmspace.h>
    #include <stdio.h>
    #include <util/delay.h>
    #include "usart.h"
    
    
    int main(void)
    {
     int y=0;
     while(1)
     { 
    	DDRA = 0xff; //Port A auf Output schalten
    	PORTA = (1<<PA0);
    	_delay_ms(5);
    	PORTA = (1<<PA1);
    	_delay_ms(5);
    	PORTA = 0x00;
      	y=y+1;
     	PORTA = 0xff;
    	_delay_ms(100);
    
    	USART1_Init();	//USART konfigurieren
    	_delay_ms(10);
    	uart_puts("Hello World");
    	_delay_ms(10);
    
      }
    return(0);
    
    }
    Danke schon mal im vorraus für eure Mühe.

    LG Anna

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    48
    Beiträge
    524
    Hallo,

    ich habe deinen Code mal auf meinen At90CAN128 gespielt. Es funktioniert und ich kann auch so keinen Fehler finden, der das Verhalten erklärt.
    Geändert habe ich die LED-Ausgabe (nur PA7), es ist ein 16Mhz Quarz, daher bekommt UBRR1L einen anderen Wert.
    Die Zeile
    Code:
    UCSR1C = (0<<UMSEL1) | (0<<UPM1) | (1<<USBS1) | (3<<UCSZ1);
    habe ich durch
    Code:
    UCSR1C = (0<<UMSEL1) | (0<<UPM1) |  (3<<UCSZ10); //9600,0,1
    ersetzt, da nur Müll in hterm angekommen ist. Aber dein Oszi hätte aber auch das anzeigen müssen.
    Weiter möchte ich dir als Tipp noch folgendes geben.
    Die USART1_Init() gehört nicht in die while-Schleife. Die Schnittstelle muss nur einmal initialisiert werden.
    Üblicherweise stehen in Headerdateien nur Definitionen, Prototypen, etc. C-Code gehört in C-Dateien und C-Dateien werden in das Projekt eingebunden (nicht über #include). Das hat aber nichts mit deinem Problem zu tun.

    Bitte prüf mal die Einstellung an deinem Oszi. Zeigt das Oszi etwas an, wenn du mit dem PC sendest?

    Gruß

    Jens

  6. #6
    Hallo Jens,

    danke für deine Mühe. Wenn dass Programm be dir so läuft, ist der Fehler 100 % in der Hardware. Ich hab nochmal die Schaltung ans Oszi gehängt und ich bekomme am Tx einen LowPegel von ca. 9V , wenn ich was schicke bekomme ich Pegel von ca. + 9V. Ich hab nur mal ein "C" übertragen. Die Pegel, die ich rausmesse entsprechen aber nicht dem Erwartungswert???????????

    Vielleicht ist mein Max232 kaputt. Das Terminalprogramm hab ich richtig eingstellt (gibts ja auch nicht so vil zum einstellen )

    LG Anna

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    48
    Beiträge
    524
    Hallo,

    die Pegel auf der PC-Seite sind mit -9V und 9V okay. Auf der µC-Seite dürfen es nur 5V sein. Kannst du den µC vom Max trennen und ihn auf der Seite brücken? Wenn du mit der Brücke Signale vom PC abschickst solltest du dein Echo im Terminalprogramm sehen können.

    Gruß


    Jens

  8. #8
    Hy Jens,

    dumme Frage, aber wie kann ich mit dem Terminalprogramm was rausschicken????
    Es gibt bei mir ne kleine Neuigkeit. Und zwar hab ich im Terminalprogramm einen Kreis (°) dargestellt bekommen. Aber auch nur einmal,als ich dass Terminal geschlossen und neu gestartet habe bekam ich nichts mehr...................

    Ach so, ich hab mal den MAX232 gewechselt, bringt aber auch nichts.........

    LG Anna

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    20.05.2006
    Ort
    Lippe
    Alter
    48
    Beiträge
    524
    Hallo,

    in der Annahme das du Windows benutzt, hier der Link zu hterm. Das Programm erklärt sich dann beim mitrumspielen von selber. Ganz oben Parameter, dann empfangen und weiter unten senden.

    Gruß

    Jens

  10. #10
    Hy Jens,

    ich hab es so gemacht wie du beschrieben (vielen Dank ) hast. Wenn ich die beiden Pins brücke, bekomme ich ein Echo wenn ich was sende.
    Das heißt ja wohl dann, dass die Hardware in Ordnung ist........ da du dass Programm ja freundlicherweise auf deinen AT90CAN übergespielt hast weis ich jetzt gar nicht mehr wo der Fehler sein könnte . Hardware OK, Software OK , wo ist der Fehler ???????????????????

    LG Anna

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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