- 12V Akku mit 280 Ah bauen         
Seite 4 von 6 ErsteErste ... 23456 LetzteLetzte
Ergebnis 31 bis 40 von 53

Thema: USART - WARUM GEHT ES NICHT? - BITTE HELFT MIR

  1. #31
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.01.2005
    Ort
    Bayern
    Alter
    38
    Beiträge
    795
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Mal was anderes.....

    Wenn ein RESET gemacht wird, dann dürfte er doch eigentlich den zuvor gesendeten Wert, welcher ja im SRAM gespeichert ist, nicht mehr aufrufen können... Oder?

    Das tut er aber, er sendet mir den wert ja zurück.

    Also führt er kein Reset durch, sondern startet die MAIN-Funktion von anfang an wieder. Ist das richtig?

    Wozu ist denn das data_alt? Das verwendest du uninitialisiert.
    Versuch mal nen poll-Betrien also Receive ohne Interrupt zu nutzen.
    Ansonsten fällt mir nur ein, daß es eine Silicon-Bug sein könnte. Evtl sagt ds Datenblatt oder die Errata zu deinem AVR was dazu, aber an so war denkt man natürlich nicht gerne...
    Sorry Sprinter, diese Antwort hab ich jetzt völlig übersehen...

    das mit data_alt hätte ich anders machen sollen... mir ist auf die schnelle nur das gekommen. Das er halt nicht periodisch sendet....
    Hätte ich mit der "Flag-methode" machen sollen

    Den interrupt zu benutzen wäre mir schon lieber, da ich Zeichenketten empfange... nicht dass ich da mal ein Zeichen verpasse... das ist dann nicht so toll....
    Gruß,
    Franz

  2. #32
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Welchen Wert im SRAM?
    Disclaimer: none. Sue me.

  3. #33
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Nochmal genau die Symptomatik:
    1 Er bringt "..INIT ok"
    2 dann wartet er
    3 und wenn du was schickst,
    reagieren die LED ?
    4 kommt wieder "..INIT ok"
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  4. #34
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.01.2005
    Ort
    Bayern
    Alter
    38
    Beiträge
    795
    Also:
    Ich schalte das Teil ein (bzw. er ist mit dem schreiben fertig)

    1. Das Programm startet.
    2. Am PC empfange ich " USART Init - OK "

    Dann sende ich zB.: A

    1. Am PC empfange ich "USART Init - OK A"



    die LED für den Empfang leuchtet warscheinlich so kurz auf dass man es nicht sieht. ich zu mal die interrupt routine ausklinken, um zu sehen was aufleuchtet... moment
    Gruß,
    Franz

  5. #35
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.01.2005
    Ort
    Bayern
    Alter
    38
    Beiträge
    795
    Ist ja interessant.

    Also der Code der nun drauf ist:

    Code:
    #include <avr/io.h> 
    #include <avr/interrupt.h> 
    #include <avr/signal.h> 
    
    #define F_CPU 7372800 
    #define USART_BAUD_RATE 115200 
    #define USART_BAUD_SELECT (F_CPU/(USART_BAUD_RATE*16L)-1) 
    
    volatile static uint8_t data;
    
    void USART_init(void){  
    
    	UBRRH = 0;
        UBRRL = (uint8_t) USART_BAUD_SELECT; 
    	
    	/* Aktivieren des Empfängers, des Senders und des "Daten empfangen"-Interrupts */
    	UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
    
    	/* Einstellen des Datenformats: 8 Datenbits, 1 Stoppbit */
    	UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
    
    	data = UDR;
    
    } 
    
    void USART_transmit(uint8_t c){ 
       while(!(UCSRA & (1<<UDRE)));
       UDR = c; 
    } 
    
    void USART_transmit_string(uint8_t *string){ 
        while(!(UCSRA & (1<<UDRE)));
    	while( *string){ USART_transmit (*string++); }
    }
    
    
    
    /*
    SIGNAL( SIG_USART_RECV ) 
    { 
        
       data = UDR;  
    
    } 
    */
    
    int main (void)
    {
    // D A T E N R I C H T U N G :
    //===============================================
    
    //	PORTA Pin: 76543210	  ( 0 = Eingang/Pullup aus, 1= Ausgang/Pullup ein )
        DDRA   = 0b11111111;	//
        PORTA  = 0b00000000;	// 
    
    //	PORTB Pin: 76543210	  ( 0 = Eingang/Pullup aus, 1= Ausgang/Pullup ein )	
        DDRB   = 0b00000000;	//
    	PORTB  = 0b00000000;	//
    	
    //	PORTC Pin: 76543210	  ( 0 = Eingang/Pullup aus, 1= Ausgang/Pullup ein )
        DDRC   = 0b00000000;	//
    	PORTC  = 0b11111111;	//
    	
    //	PORTD Pin: 76543210	  ( 0 = Eingang/Pullup aus, 1= Ausgang/Pullup ein )
        DDRD   = 0b11111111;	//
    	PORTD  = 0b00000000;	//
    	
    	
    
     
    USART_init();
    USART_transmit_string("USART INIT - OK  ");
     
     sei();
     
     uint8_t data_alt;
     
    while (1) { 
    
    PORTA = UCSRA;
    PORTD = data;
    
    /*
    if( data != data_alt ){
    
    USART_transmit(data);
    
    data_alt = data;
    
    }
    */
    
    
    }
    }
    Nun...

    1. ich schalte ein
    2. PC empfang "USART Init - OK"
    3. Ich sende
    4. PC empfang"USART Init - OK"

    Wenn ich meine Gedanken mal preisgeben darf: "BAHNHOF"!
    Gruß,
    Franz

  6. #36
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Moment:
    Mach mal line feed in den ok-string
    "USART INIT - OK\n\r"
    dadurch fängt er dann eine neue Zeile an.
    in dieser neuen Zeile sollte dann nurmehr das "A" stehen oder sonstwas
    aber nicht nochmal "blabla OK"
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  7. #37
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Nimm mal das sei() raus, dann müsste es immer noch gehen.
    Disclaimer: none. Sue me.

  8. #38
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.01.2005
    Ort
    Bayern
    Alter
    38
    Beiträge
    795
    Also OHNE sei():

    Da Leuchtet dann was neues auf!

    Und zwar in UCSRA BIT7: RXC = USART Receive Complete


    das mit dem Zeilenumbruch... HTERM erkennt keinen ;-(
    Gruß,
    Franz

  9. #39
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    und der Start-String kommt immer noch 2x?
    Den Zeilenumbruch musst du auch senden (mit '\n') und HTERM anpassen.
    Disclaimer: none. Sue me.

  10. #40
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Das war vorher sicher auch schon da, aber das Lesen von UDR löscht das.
    Inzwischen liest es aber keiner mehr, also bleibt es stehen.

    HTERM ? kein Zeilenumbruch ? scheint mir ein merkwürdiges Programm.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Seite 4 von 6 ErsteErste ... 23456 LetzteLetzte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress