-         

Ergebnis 1 bis 7 von 7

Thema: Serielle Schnittstelle

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.03.2006
    Beiträge
    200

    Serielle Schnittstelle

    Anzeige

    Hallo Leute,

    Ich versuche seit heut Morgen eine Verbindung zwischen meinem PC und meinem RNMega8 via serieller Schnittstelle aufzubauen, leider bisher ohne Erfolg.

    Mein Quarz schwingt mit 7,2738MHz. An meinem Programmierkabel sind die Pins 2 und 3 mit RX und TX verbunden, Die Masseleitung geht an das Gehäuse des 9poligen Steckers.

    Die Einstellung meiner Fusebits habe ich mittels Ponyprog ausgelesen und in den Anhang gepackt.

    Am Hyperterminal sind 9600baud eingestellt, Flussteuerung: keine, der Rest wie voreingestellt.

    Folgendes Programm verwende ich:
    Code:
     .NOLIST                    	
     .INCLUDE <m8def.inc>       	
     .def temp = R16				
     .def zeichen = R17
     
     ;------------------------------------------------------
     ;    Peripherie initialisieren
     ;------------------------------------------------------
    .equ F_CPU = 4000000                            ; 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
    
     .LIST                      	
     .CSEG                      	
     ;------------------------------------------------------
     ;     Start Adresse 0000 /Interruptvektoren
     ;------------------------------------------------------
     .org 0x000
    	rjmp Init			; Interruptvektoren überspringen
     
     ;------------------------------------------------------
     ;     INITIALIZE
     ;------------------------------------------------------
    INIT:
    ;Stack Pointer setzen
      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)|(3<<UCSZ0)
      out     UCSRC, temp
      sbi     UCSRB,TXEN                  ; TX aktivieren
    
     ;------------------------------------------------------
     ;   HAUPTSCHLEIFE
     ;------------------------------------------------------
    Hauptschleife:					
    	
    	ldi     zeichen, 'T'
        rcall   serout
        ldi     zeichen, 'e'
        rcall   serout
        ldi     zeichen, 's'
        rcall   serout
        ldi     zeichen, 't'
        rcall   serout
        ldi     zeichen, '!'
        rcall   serout
        ldi     zeichen, 10
        rcall   serout
        ldi     zeichen, 13
        rcall   serout
    
    
    rjmp Hauptschleife
    
    
     ;------------------------------------------------------
     ;   Subroutinen / ISRs
     ;------------------------------------------------------
    serout:
        sbis    UCSRA,UDRE                  ; Warten bis UDR für das nächste
                                            ; Byte bereit ist
        rjmp    serout
        out     UDR, zeichen
        ret
    
     ;------------------------------------------------------
     ;   Datenbereich
     ;------------------------------------------------------
    Daten:
               .db 0x00, 0x00
               .db 0x00, 0x00
    
    
     ;------------------------------------------------------
     ;   ENDE
     ;------------------------------------------------------
     Ende:  
            rjmp Ende
    Meine Frage wäre nun, ob das Programmierkabel richtig ist, der Quarz geeignet ist und die richtige Baudrate verwendet wird. Vielleicht kann ja auch jemand mal das Programm testen.

    Was mir aufgefallen ist, dass beim resetten meines Boards, komische Zeichen an das Terminalprogramm übermittelt werden.

    Danke schon mal für euer Kopfzerbrechen..
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken fusebits_830.jpg  

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.11.2006
    Ort
    K-Town
    Alter
    39
    Beiträge
    178
    meines wissens nach bekommst du keine datenübertragung mit 9600Baud bei einem Quarz von 4 Mhz hin.... vor allem nicht wenn du den internen oszi verwendest!!

    (steht jedenfalls so in deiner Software!) - (dein Quarz ist wahrscheinlich garnicht aktiv...!)


    intern musst du auf 8 Mhz erhöhen um 9600 zu realisieren.
    mit Quarz kannst du z.B. 3,686 Mhz nehmen... dann funktioniert es auch mit 115kBaud!


    prüf das mal...
    Zapo.

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.09.2005
    Ort
    am Bodensee
    Beiträge
    217
    hmm grad nur überflogen aber was mir auffällt,

    du hast
    .equ F_CPU = 4000000 ; Systemtakt in Hz
    schreibst aber oben das nen
    7,2738MHz
    drin hast,

    hab ich grad was über sehen?
    ich mein aber es sollte

    .equ F_CPU = 7273800 ; Systemtakt in Hz für den Quarz

    sein.

    dann dein "da kommen zeichen beim Ein oder Ausschalten..." mag gut sein problem ist halt das dir das nur sagt dass du am richtigen Comport bist nicht mehr und nicht weniger.


    könntest an deinem Terminal mal probieren auf 19k2 einstellen da könnte ein Teil richtig ankommen (da du ca die halbe Quarz Freq zum berechnen nimmst)

    machs aber auf jeden fall richtig



    hast beim Terminal am pc auch 9k6 eingestellt ?

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.09.2005
    Ort
    am Bodensee
    Beiträge
    217
    mit 9600 kannst fast jeden Quarz nehmen und es geht.


    ich würd erst mal gucken ob da nicth der fehler liegt mit den 4mhz.. und dem ext quarz von 7,xxx mhz
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken ubrr.gif  

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.183
    Der GND gehört an den Pin5 des 9pol Stecker, über das Gehäuse ist die Masseverbindung nicht sicher.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.03.2006
    Beiträge
    200
    Danke für die Hilfe...

    Problem war die falsche MHz-Zahl im Programm, hab ich wohl einfach vergessen zu ändern. Da hätte ich wohl noch lange suchen können.

    Stecker werde ich noch ändern und irgendwann auch noch die Tabelle verstehen
    Aber nun kanns ja mit dem experimentieren weitergehen \/

    Warum kann man eigentlich keine Punkte für hilfreiche Antworten vergeben?!

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.09.2005
    Ort
    am Bodensee
    Beiträge
    217
    Weil wir alle gern Helfen *gg*

    geht mir auch oft so wenn nen Programm schreibst es 2873987 male liest aber sowas übersiehst ist ganz normal *g*

    viel Spass beim Weiterbasteln =) und wenns probleme gibt einfach im Forum posten .)

Berechtigungen

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