-         

Ergebnis 1 bis 6 von 6

Thema: Serielle Ausgabe - Abbruch

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    30.10.2005
    Beiträge
    52

    Serielle Ausgabe - Abbruch

    Anzeige

    Hallo,

    hab da ein Problem mit der seriellen Ausgabe von Zeichen.
    Ich habe die Schaltung wie im Anhang und messe dort am MAX485 auf dem Bus A und Bus B.

    Die Software, s. Anhang, sendet 1000mal das Zeichen "d".
    In der markierten Zeile ist eine Wartefunktion. Wird hier 20ms gewartet, werden die Zeichen vom Atmega128 auch korrekt auf den Bus-Leitungen übertragen. Setze ich die Wartezeit auf 2ms herab, so werden nur noch teilweise die Zeichen übertragen (von den 1000 Stück max. 150).

    Kurz zum Programmablauf:
    -Ich setze den 485-Bus auf senden
    -Warte 0,1ms (bis der Port geschaltet ist)
    -Sende das Zeichen "d"
    -Warte, bis das Interrupt sagt, der Sendepuffer ist leer
    -Setzte den 485-Bus auf Empfangen
    -Warte jetzt die o.g. Zeit (steht der weitere Programmablauf hinterher drin).

    Hat jemand eine Idee, warum da nicht die 1000 Zeichen übertragen werden?

    Mfg,
    Wurm
    Angehängte Dateien Angehängte Dateien

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    35
    Beiträge
    1.987
    Nur mal ne Vermutung: aber wenns was mit der Wartezeit zu tun hat, könnte es _vielleicht_ an "waitms 0.1" liegen. Ich weiss nicht genau, ob Bascom das so versteht. Probier da mal "waitus 100".

    Nur komisch find ich die Wartezeit mit 20ms... Darüber wartest du ja sowieso, ob der Puffer leer ist, also ob das Zeichen schon unterwegs ist.
    Rechnerisch sollte ein Zeichen bei 19200 bps nach 0,52ms draussen sein...
    #ifndef MfG
    #define MfG

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    30.10.2005
    Beiträge
    52
    Hallo,

    Du hast recht, Bascom hat ein Problem mit `waitms 0.1´.
    Das löst mein Problem aber immer noch nicht.

    Ich hab ein wenig weiter experimentiert und erst mal alles unnötige aus dem Programm rausgeworfen.

    Im Anhang ist jetzt neue Variante. Entferne ich die Zeile ´waitms 2´, dann werden alle 1000 Zeichen korrekt gesendet. Mache ich dort einen Eintrag ´waitms 20´ werden auch alle Zeichen korekt gesendet.
    Steht dort eine andere Wartezeit, z.B. 2 ms, dann werden massig Zeichen verschluckt.
    Ich verstehe das nicht. Kann mir das nur erklären, dass es irgendwas mit dem Timing an der UART zu tun haben kann.

    Vielleicht hat ja jemand eine Idee?

    Mfg,
    Wurm
    Angehängte Dateien Angehängte Dateien

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    35
    Beiträge
    1.987
    Sehr bizarres Problem... scheint ein Pumuckl drin zu sein.

    Versuch mal, verschiedene Zeichen zu senden... also abcdefgh..xyz.
    Wäre mal interessant, ob dort zwischendrin einfach Zeichen fehlen oder ob einfach irgendwann abgebrochen wird.
    #ifndef MfG
    #define MfG

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    30.10.2005
    Beiträge
    52
    Hallo,

    bei verschiedenen Zeichen ist das selbe Problem.
    Ich hatte die Vermutung, dass der 485-Bus das Problem verursacht. Und zwar die Umschaltung zwischen senden und empfangen.
    Ich hab dann den Bus auf senden gesetzt, 1ms gewartet, dann das Zeichen gesendet, gewartet bis der Sendepuffer leer ist, nochmals 1ms gewartet, dann den Bus wieder auf empfangen geschaltet.
    Das Problem ist gleich geblieben. Damit scheidet für mich die Ansteuerung des 485-Bausteins aus.
    Der Microcontroller sendet aber korrekt, wenn ich da direkt am TXD-Pin messe.
    Folgendes finde ich merkwürdig: Laß ich die Wartezeit nach einem Sendezyklus weg (s. vorherige Posings), dann zeigt mir das Terminalprogramm nur das gesendete Zeichen an (100). Mit einer eingetragenen Wartezeit wird im Terminalprogramm eine 100 und danach eine 0 angezeigt.

    Bin im Moment ratlos, was das sein kann.

    Mfg,
    Wurm

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    probier mal das:
    Code:
    $regfile = "m128def.dat"                                    'ATMega128 definieren
    $crystal = 6000000                                          'Taktfrequenz auf 6 MHz setzen
    $baud = 19200
    $baud1 = 19200                                              'Baudrate für Diagnose
    $hwstack = 256                                              ' default use 32 for the hardware stack
    $swstack = 256                                              ' default use 10 for the SW stack
    $framesize = 256
    
    
    
    Busrxtx Alias Portd.4
    Config Print1 = Busrxtx , Mode = Set
    Config Busrxtx = Output                                     'set the direction yourself
    
    Config Porta.1 = Output
    Led Alias Porta.1
    
    Dim Slave1_in As Integer
    Dim Slave2_in As Integer
    Dim Sendepuffer As Byte
    Dim Zaehler As Integer
    Dim Zeichen As Byte
    Dim Zeichen_in As Byte
    Dim Zeichenzaehler As Integer
    
    Config Com2 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 1
    'Config Serialout1 = Buffered , Size = 1
    'Enable Interrupts
    'Config Serialin1 = Buffered , Size = 20
    Open "COM1:" For Binary As #2
    Open "com2:" For Binary As #1
    
    On Utxc1 Puffer_leer
    Enable Utxc1
    Enable Interrupts
    
    Set Led
    Waitms 1000
    Reset Led
    Waitms 1000
    
    
    For Zaehler = 1 To 1000
       Printbin #1 , 100;
       'Waitms 2                                                 '********** UM DIESE ZEILE GEHTS******************
    Next
    End
    
    
    '****************************
    ' SendepufferInterrupt
    Puffer_leer:
      'Sendepuffer = 0
    Return
    '*********
    PS: auch gern gemachter Fehler ist die fehlende Terminierung
    Vor den Erfolg haben die Götter den Schweiß gesetzt

Berechtigungen

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