- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 9 von 9

Thema: Mehrere AVR-Controller über RxD TxD verbinden - Timingproble

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.07.2004
    Beiträge
    274

    Mehrere AVR-Controller über RxD TxD verbinden - Timingproble

    Anzeige

    E-Bike
    Hallo,

    ich hab ein Problem mit der Datenübertragung beim ATTiny 2313 mit der Serielen Schnitstelle.

    Ich habe mehrere AVR's an einem Datenbus. Die Verbindung und der Datenaustausch klappt hervorragend!

    Initialisiert habe ich es mit :

    Open "comd.1:100,8,n,1,inverted" For Output As #1
    Open "comd.0:100,8,n,1" For Input As #2


    Das Funktioniert auch Perfekt! Daten kommen so an wie sie sollen!

    So zu meinem Problem :

    Wie kann ich es machen, das die Daten empfangen werden, wärend der AVR was anderes macht (z.b. einen A/D Wandler ausliest oder so)?

    Kann ich die Daten aus einem Empfangspuffer lesen? Wenn ja wie?

    Ich hab schon überlegt einen Interrupt auszulösen sobald am RxD sich was ändert, und dann mit Inkey eine Abfrage starte.

    Leider ist es so, das wenn der Prozessor was macht, und eine "Anfrage" kommt, das er nach dem "etwas machen" garnix merkt! Also er sollte mit einem Ohr hinhören!

    Grüße
    Alex

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Der 2313 hat doch eine HW-UART ? Wenn ja, kannst du doch mit
    CONFIG Serialin=Buffered, size = nn eine Buffer definieren, in den der Bascom asynchron mit Interrupt reinschreibt, und du liest es aus, wenn du Zeit hast ?
    (Help "Config")
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.07.2004
    Beiträge
    274
    Hi,

    danke für die Antwort! Leider klappt das mit dem selber geöffneten Port nicht! Ich brauche nämlich beim output "inverted".

    Den kann ich so nicht angeben!

    Sonst würd ich gerne

    Code:
    $Baud 100
    
    Config Serialin = Buffered , Size = 20                     
    Enable Interrupts
    
    do
    
    B = Inkey()
    Kann ich der Internen HW nicht sagen das sie beim TxD "inverted" nimmt?
    Oder einfach nur die RxD-HW aktivirt?

    Grüße
    Alex

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Inverted is'nich. Aber natürlich kannst du von der UART Rx u. Tx auch isoliert verwenden. Also receive mit der HW, senden zu Fuß, was ja auch leichter ist.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.07.2004
    Beiträge
    274
    Hi PicNick,

    also Senden langt mir mit

    Open "comd.1:100,8,n,1,inverted" For Output As #1

    ...
    ...

    Print #1, "Hallo"

    Aber Empfangen sollte über die HW-UART des AVR, da ich sonst Systemrecourcen für den Empfang nutzen mus, was er ja im "Hintergrund"

    erledigen kann.

    Nur, wenn ich über die HW-UART auf Empfang gehe, initialisiert er mir die TxD auch, und zwar auf "High"!

    Wie kann ich das getrennt machen? Hast Du dafür einen Code?

    grüße
    Alex

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.12.2004
    Alter
    71
    Beiträge
    277
    Zitat Zitat von Alex20q90
    Nur, wenn ich über die HW-UART auf Empfang gehe, initialisiert er mir die TxD auch, und zwar auf "High"!
    Yupp, das macht der Schweinehund soifort nach dem Befehl $Baud xxxx.

    Im weiteren Verlauf läßt sich das dann ändern:

    SET UCR.3 schaltet TXD ein
    SET UCR.4 schaltet RXD ein
    RESET UCR.3 schaltet TXD aus <---------------- Das ist für Dich wichtig.
    RESET UCR.4 schaltet RXD aus

    Dann noch den Portx.x händisch wieder auf 0 setzen und gut isses.

    Grüße
    Henrik

  7. #7
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    @Henrik, danke, das hätt' ich dazusagen müssen
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  8. #8
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.07.2004
    Beiträge
    274
    So hi,

    hab jetzt folgendes erstellt : (auszug)


    Code:
    $regfile = "2313def.dat"                                    'AT90S2313
    $crystal = 8000000                                          'Quarz 8MHz
    $baud = 110
    
    Dim Name As Byte
    
    Config Serialin = Buffered , Size = 20
    Enable Interrupts
    
    Reset Ucr.3
    Portd.0 = 0                                                 'Rx Port
    
    
    
    do
    
    name = Inkey()
    
    If Err = 0 Then
    If Name= Chr(001) Then
      xxxxxx
    endif
    endif
    
    loop
    end
    Das sind die Kriterien mit denen ich versuche die Seriellen Daten aus dem puffer zu lesen!

    Wenn ich aber :

    Code:
    $regfile = "2313def.dat"                                    'AT90S2313
    $crystal = 8000000                                          'Quarz 8MHz
    
    Dim Name As Byte
    
    Open "comd.0:110,8,n,1" For Input As #1
    
    
    do
    
    name = Inkey(#1)
    
    If Err = 0 Then
    If Name= Chr(001) Then
      xxxxxx
    endif
    endif
    
    loop
    end
    Nutze klappt es! Woran kann das liegen?

    Grüße
    Alex

  9. #9
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Code:
    if ischarwaiting() then 
          name = Inkey() 
          If Name = 1 Then
             xxxxxx 
          endif 
    endif
    Bei der gebufferten Variante mußt du immer erst schauen, ob überhaupt was angekommen ist.

    Bemerkung: chr(1) = 1
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Berechtigungen

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

LiFePO4 Speicher Test