- Labornetzteil AliExpress         
Seite 2 von 9 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 84

Thema: Gerät über RS232 ansprechen

  1. #11
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.07.2004
    Ort
    Regensburg
    Alter
    40
    Beiträge
    366
    Anzeige

    LiFePo4 Akku selber bauen - Video
    ich habe ihn derzeit mit dem internen 1mhz getaktet.

    1. muss ich die taktrate ändern, damit ich mit 19200 baudrate arbeiten kann?

    2. wenn ja, auf wieviel mhz?

    3. wie stell ich das an?

    danke,

    xeus

  2. #12
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Hallo,

    wie sollte man denn die Serielle Schnittstelle einstellen damit das Gerät auch so empfängt wir der AVR sendet,
    also ich mein jetzt nicht nur wieviel Baud, sondern auch den Rest wie Stoppbit, Parität, anzahl Bits usw. ?!

  3. #13
    Neuer Benutzer Öfters hier
    Registriert seit
    12.08.2005
    Beiträge
    9
    guten abend zusammen,

    also lass deinen Takt mal von einem externen Quarz machen. Saubere Taktraten lassen sich unter anderem aus folgenden Quarzfrequenzen generieren:

    3,6863Mhz
    14,7456MHz

    zum erstgenannten noch 33p Bürdekapazitäten und dann müsste das funktionieren. Tut es auf jeden Fall bei mir

    greetzle brat

    und ach ja

    serielle schnittstelle 8N1 also 8 bits, keine parität, und 1 stopbit

  4. #14
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    11.04.2005
    Beiträge
    1.469
    ha, ha, ha
    das hab ich doch gemacht. nur an der empfangsseite kommt es verfälscht an.
    Das war aber aus deinem Code nicht zu ersehen.
    Also wenn du die Zeilen:

    $crystal=1000000 und
    $baud=19200
    und der Taktgenerator auf 1MHz steht (fusebits einstellen !, wobei ich nicht weiß, welche Settings der Mega 8 kann.)
    dann sollte es funktionieren.

    Du kannst Bascom auch eine andere Baudrate vorgaukeln...
    mach' crystal = geteilt durch 4, dann kommst du auch auf 19200,
    wenn du vorher 4800 hattest.
    Funzt zwar, ist aber Quatsch, denn entweder ist dein Takt falsch in den Fusebits eingestellt, oder die Taktfrequenz falsch in Bascom eingegeben.

    Gruß
    Christopher

  5. #15
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.07.2004
    Ort
    Regensburg
    Alter
    40
    Beiträge
    366
    Also ich habs ets hinbekommen, das mein m16 mit 16Mhz läuft. und bei einer baudrate von 19200 mit dem gerät kommuniziert.

    ich hab die kommunikation wie oben beschrieben realisiert, nun will ich das er das 2.empfangene Byte mit der Zahl 6 vergleicht, und mir 'fehler' bzw. 'kein fehler' über das UART ausgibt.
    Code:
    Sub Status
     if Packete(2)= 6 then
      print  'kein Fehler'
       else
         print 'Fehler'
    return
    end sub
    wenn ich im nun als 2.Byte eine 6 sende, gibt er kein fehler aus, und bei einer zahl ungleich 6 fehler. was so weit je schon mal gut ist. aber wiederhole ich diesen vorgang gibt er immer fehler aus.
    woran kann das liegen?

    mfg

    xeus

  6. #16
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Kannst du den aktuellen Code reinstellen ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  7. #17
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.07.2004
    Ort
    Regensburg
    Alter
    40
    Beiträge
    366
    Hier der code, wie gesagt ich empfange ein packet mit 8 bytes, davon soll er das 2. mit '006' vergleichen.

    desweiteren hab ich noch ein Problem mit der Checksummen berechnung, er läst mich bei einer bitverschiebung das ergebnis nicht in eine seperate variable schreiben.

    Code:
      $regfile = "m16def.dat"
    
    $crystal = 20000000                                         'Quarz: 3.6864 MHz
    $baud = 19200
    
    Dim I As Byte
    Config Lcdpin = Pin , Db4 = Porta.6 , Db5 = Porta.5 , Db6 = Porta.4 , Db7 = Porta.3 , E = Porta.7 , Rs = Porta.2       ' Natürlich so wie es wirklich angeschlossen ist (4-Bit-Modus)
    Dim A As Byte
    Config Lcd = 20 * 4                                         'Baudrate der UART: 9600 Baud
    
    Config Pind.1 = Input
    Config Pind.0 = Output
    
    
    Config Pind.5 = Output
    Config Pind.2 = Input
    
    
    Dim Clc_l As Byte
    Dim Clc_h As Byte
    Dim New , New1 , New2 , New3 As Byte
    Dim Tmp As Byte
    Dim Bcclo As Byte
    Dim Bcchi As Byte
    Dim X As Byte
    
    Dim Packets(10) As Byte
    Dim Packete(8) As Byte
    Declare Sub Sendewr
    Declare Sub Empfangewr
    Declare Sub Clc
    Declare Sub Lcdout
    Declare Sub Status
    Dim Line1 As String * 20
    Dim Line2 As String * 20
    Dim Line3 As String * 20
    Dim Line4 As String * 20
    
    'PowerLED
    Portd.5 = 1
    
    
    'Init Packets
    Packets(1) = 002
    Packets(2) = 050
    Packets(3) = 000
    Packets(4) = 032
    Packets(5) = 032
    Packets(6) = 032
    Packets(7) = 032
    Packets(8) = 032
    Packets(9) = 9
    Packets(10) = 10
    
    
    
    'LCD init
    Initlcd
       Line1 = "test"
       Line2 = "     S T A R T!"
       Line3 = " com"
       Line4 = "www.ich.de"
    Gosub Lcdout
    
    Do
    
       'Taster 1
       If Pind.2 = 1 Then
          Line2 = "       reset"
           Line3 = " com"
          Print "reset"
         Gosub Lcdout
       End If
    
       'Taster 2
       If Pind.4 = 1 Then
          Gosub Sendewr
          Gosub Empfangewr
          'Gosub Status
    
       End If
    Loop
    
    'SUBs
    
    'Anfrage an WR stellen
    Sub Sendewr
       Line2 = "   sende Anfrage"
       Line3 = " com"
       Printbin Packets(1) ; 10
       Gosub Lcdout
       'Gosub Clc
    
    Return
    End Sub Sendewr
    
    'Status vom WR empfangen
    Sub Empfangewr
       Line2 = "  warte auf Daten"
       Gosub Lcdout
       Inputbin Packete(1) , 8
    
       Gosub Status
    Return
    End Sub Empfangewr
    
    
    'Checksumme berechnen
    Sub Clc
       'Init
       Bcclo = &H0XFF                                           'setze high
       Bcchi = &H0XFF                                           'setze high
       New = &B11011001                                         'lade byte
    
       New = New Xor Bcclo
       Tmp = Shift New , Left , 4                               'Fehlermeldung
       New = Tmp Xor New
       Tmp = Shift New , Right , 5                            'Fehlermeldung
       Bcclo = Bcchi                                            'setze gleich
       Bcchi = New Xor Tmp
       Tmp = Shift New , Left , 3                              'Fehlermeldung
       Bcclo = Bcclo Xor Tmp
       Tmp = Shift New , Right , 4                           'Fehlermeldung
       Bcclo = Bcclo Xor Tmp 
    'Gosub Lcdout
    
       Return
    End Sub Clc
    
    
    'LCD Ausgabe
    Sub Lcdout
       Cls
       Locate 1 , 1                                             '1. Zeile
       Lcd Line1
       Locate 2 , 1                                             '2. Zeile
       Lcd Line2
       Locate 3 , 1                                             '3. Zeile
       Lcd Line3
       Locate 4 , 3                                             '4. Zeile
       Lcd Line4
       Return
    End Sub
    
    
    'Status Auswertung
    Sub Status
        If Packete(2) = 006 Then       'Vergleich ob das 2.Byte den wert 6 trägt
             Line3 = "kein Fehler"
             Print "kein fehler"
           Else
             Line3 = "  Fehler"
             Print "fehler"
          End If
    Gosub Lcdout
    Return
    End Sub Status
    
    
    End                                                         'end program
    wär nett wenn mir jemand helfen könnte das mit dem vergleich und der checksumme hintzkriegen.

    mfg

    xeus


    Moddy: Code-Tags ausgebessert

  8. #18
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    mein Bascom ist aus mehreren Gründen stinkesauer mit deiner source

    dim new, new1, .. as byte nimmt er nicht, das braucht er einzeln

    SHIFT hat keinen output-parameter. das Feld wird geshiftet, bleibt aber, wo es ist.
    wenn du sowas willst wie
    Tmp = Shift New , Left , 4
    muttu schreiben:
    Tmp = New
    Shift Tmp, Left , 4
    Welche Art Checksum ist das ? (nur informativ)

    Fehler Pakete(2)
    Schau mal, ob der Sender nicht vielleicht <CR><LF> nach den 8 byte dazusendet.
    Egal, überprüfe den input:
    nach
    inputbin pakete(1), 8
    machst du
    Print str(pakete(1)) ;str(pakete(2)) ;...str(pakete()
    dann siehst du, was effektiv drinsteht und kannst dir vielleicht einen Reim drauf machen
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  9. #19
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.07.2004
    Ort
    Regensburg
    Alter
    40
    Beiträge
    366
    erstmal danke, für deine hilfe.

    bei der CRC handelt es sich um ein CCITT standrisiertes CRC Polynom:
    mit 2Bytes BccLo & Bcchi

    Bn=N^16+N^12+N^5+Bn-1

    A. Init BccLo=0xFF, BccHi=0xFF

    B. Für jedes Byte das gesendet und empfangen wird

    new=new XOR BccLo
    tmp=new<<4
    new=tmp XOR new
    tmp=new>>5
    BccLo=BccHi
    BccHi=new XOR tmp
    tmp=new<<3
    BccLo=BccLo XOR tmp
    tmp=new>>4
    BccLo=BccLo XOR tmp
    C. Negieren Bit by Bit BccLo & BccHi: CLC_L=~BccLo CLC_H=~BccHi
    also, das mit XOR ist schon mal kein Problem.
    das mit dem bitverschieben müsste eigentlich auch möglich sein. das problem ist nur den wert in die entsprechende variable zu übertragen.

    Also mein sender hängt defenetiv keine bytes oder bits dran, denn bei dem sender handelt es sich um ein selbstgeschriebenes programm, sendet genau 6 bytes + 2bytes CLC_L,CLC_H

    Noch eine zusätzliche Fragen:

    wenn ích die bytes empfange (input packet(1)...)
    muss es doch möglich sein z.b. das 2. byte mit einem vorgegebenen wert zu vergleichen, und daraufhin eine reaktion auszuführen.

    gruß

    xeus

  10. #20
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Wegen dem 2. Byte: Ich hab ja gesagt, mach nach dem Empfang der 8 Byte ein print mit allen Zeichen.
    Da werden irgendwelche verschiebungen stattfinden. da du ja weißt, was du schickst, kannst du daraus dann das Problem einkreisen
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Seite 2 von 9 ErsteErste 1234 ... LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test