- LiFePO4 Speicher Test         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 25

Thema: Uart

  1. #11
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.11.2008
    Beiträge
    131
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Ja ich hab auch mit dem Jumper noch ein bisschen experimentiert. Herausgenommen, Textdateien gesendet mit und ohne Jumper, etc. Ohne Jumper kann man nicht mal was eingeben. Beim Board habe ich einen Jumper an die falsche stelle gesetzt. Jetzt funktioniert die Übertragung. Aber ich bekomme anstatt "Test!", "0R0R0R0R0R0R0R0R0R0R0R0R0R0R0R0R".
    Woran könnte das liegen?
    C(0._0-)D

  2. #12
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Das klingt nach Baudrate. (Oder µC Taktfrequenz --> check fuses)

    Wenn das Teminal mehr Zeichen (als gesendet) zeigt, ist die µC Baudrate zu niedrig. (oder der Quartz, s.o)

    Mich wundert aber etas das gleichförmige 0R0R.....
    das wiederum könnte am µC Programm liegen, das in wirklichkeit schrott statt des Textes schickt.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #13
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.11.2008
    Beiträge
    131
    Die fuses sind so http://www.mikrocontroller.net/image...a8-nachher.png

    Einen Fehler im Programm kann ich auch nahezu ausschließen weil ich den kompletten Syntax schon aus dem avr-Toturial kopiert und geflasht habe.
    Dabei kam auch 0Ò0R0R0R0R0R0R0R0R0R0R0R0R0R0R0R0R0R0R0R0R0R0R0R0R 0R0R0R0R0R0R0R0R0R0R0R0R0R0R0R
    0R0R0R0R0R0R0R0R0R0R0R0R0R0R0R0R0R0R0R0R0R0R0R0R0R 0R0R0R0R0R0R0R0R0R0R0R0R0R0R0
    heraus.

    Ich habe es auch schon mit einem AT-mega8 anstatt des ATMEGA16 probiert. Mach keinen unterschied.
    C(0._0-)D

  4. #14
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Mach mal dein Programm mal ohne Loop, d.h. schick' nur einmal den Text und dann nix mehr.
    Und zeig möglichst genau, was das Teminal dann bringt.
    Die Baudrate stimmt dann, wenn genausoviele Zeichen gezeigt werden, wie geschickt wurden. Schwierigkeit: das Terminalprogramm zeigt eventuelle binär "00" nicht her. Aber vielleicht kommen wir der Sache trotzdem näher.

    Zweite Möglichkeit: du schickst immer nur EIN bestimmtes Zeichen und dann pause und dann wieder.
    Gut sind da ein-bit-zeichen, z.B. "@" also 0x40. Je nachdem, was dann das Terminal zeigt, kann man ableiten, was es mit der Baudrate auf sich hat.


    Nach wie vor sorge ich mich wegen der Dauer-R's
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #15
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.11.2008
    Beiträge
    131
    Hallo.

    Beim Programm ohne loop kommt nichts an. Sende ich ein Zeichen z.B. "T" ohne loop kommt auch nichts an. Sende ich das zeichen'@' mit anschließender verzögerung und dann rjmp loop kommt þ~~~~~~
    hmmmn. Aber immerhin kenn ich mich schon ein bisschen besser aus. Vielleicht krieg ich es ja noch hin.
    C(0._0-)D

  6. #16
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.11.2008
    Beiträge
    131
    Achso es kommt immer nur ein ~ und dann die Pause. Die Baudrate müsste somit stimmen.
    C(0._0-)D

  7. #17
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    naja, eine Tilde "~" ist hex 0x7E 01111110

    Dass die Baudrate stimmt, kann man da nicht ableiten, wenn du eigentlich
    "@" schickst, also 0 0000 00101 . Das schaut ja schom fast verkehrt polarisiert aus

    01111110 "~"
    00000010 "@"


    Schau dir bitte (mir zuliebe) in deinem Programm nochmal insbes.
    .equ F_CPU = 4000000
    .equ UBRR_VAL = ((F_CPU+BAUD*8 )/(BAUD*16)-1)
    ZEICHENGENAU an.

    bei den nullen bei der CPU hab ich mich schon mal vertan und lange gesucht
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  8. #18
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.11.2008
    Beiträge
    131
    .equ F_CPU = 16000000
    .equ UBRR_VAL = ((F_CPU+BAUD*8 )/(BAUD*16)-1)
    So sieht das bei meinem Programm aus. Ich habe ein 16MHz-Quarz.
    Ich habe immer noch das 0R0R...-Problem.
    C(0._0-)D

  9. #19
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.11.2008
    Beiträge
    131
    Code:
    .include "m8def.inc"
     
    .def temp    = r16                              ; Register für kleinere Arbeiten
    .def zeichen = r17                              ; in diesem Register wird das Zeichen an die
                                                    ; Ausgabefunktion übergeben
     
    .equ F_CPU = 16000000                            ; Systemtakt in Hz
    .equ BAUD  = 9600                               ; Baudrate
     
    ; Berechnungen
    .equ UBRR_VAL   = ((F_CPU+BAUD*8 )/(BAUD*16)-1)  ; clever runden
    .equ BAUD_REAL  = (F_CPU/(16*(UBRR_VAL+1)))      ; Reale Baudrate
    .equ BAUD_ERROR = ((BAUD_REAL*1000)/BAUD-1000)  ; Fehler in Promille
     
    .if ((BAUD_ERROR>10) || (BAUD_ERROR<-10))       ; max. +/-10 Promille Fehler
      .error "Systematischer Fehler der Baudrate grösser 1 Prozent und damit zu hoch!"
    .endif
     
        ; Stackpointer initialisieren
     
        ldi     temp, HIGH(RAMEND)
        out     SPH, temp
        ldi     temp, LOW(RAMEND)
        out     SPL, temp
     
        ; Baudrate einstellen
     
        ldi     temp, HIGH(UBRR_VAL)
        out     UBRRH, temp
        ldi     temp, LOW(UBRR_VAL)
        out     UBRRL, temp
     
        ; Frame-Format: 8 Bit
     
        ldi     temp, (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0)
        out     UCSRC, temp
     
        sbi     UCSRB,TXEN                  ; TX aktivieren
     
    loop:
        ldi     zeichen, 'T'
        rcall   serout                      ; Unterprogramm aufrufen
        ldi     zeichen, 'e'
        rcall   serout                      ; Unterprogramm aufrufen
        ldi     zeichen, 's'
        rcall   serout                      ; ...
        ldi     zeichen, 't'
        rcall   serout
        ldi     zeichen, '!'
        rcall   serout
        ldi     zeichen, 10
        rcall   serout
        ldi     zeichen, 13
        rcall   serout
        rcall   sync                        
        rjmp    loop
     
    serout:
        sbis    UCSRA,UDRE                  ; Warten bis UDR für das nächste
                                            ; Byte bereit ist
        rjmp    serout
        out     UDR, zeichen
        ret                                 ; zurück zum Hauptprogramm
     
    ; kleine Pause zum Synchronisieren des Empfängers, falls zwischenzeitlich
    ; das Kabel getrennt wurde
                                        
    sync:
        ldi     r16,0
    sync_1:
        ldi     r17,0
    sync_loop:
        dec     r17
        brne    sync_loop
        dec     r16
        brne    sync_1  
        ret
    C(0._0-)D

  10. #20
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.11.2008
    Beiträge
    131
    Aus dem Toturial kopiert und nur .equ F_CPU 4000000 zu .equ F_CPU 16000000 verändert
    C(0._0-)D

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress