- 12V Akku mit 280 Ah bauen         
Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 32

Thema: IR-Schaltung geht nicht

  1. #11
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    31.01.2004
    Beiträge
    585
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Was meinst du mit "daten = 23" ?
    Ich wollte doch bytes versenden .. keine Zahlen. Das verstehe ich nicht :-O

    MfG,
    ShadowPhoenix

    PS: Wie rückt man in einem Byte weiter

  2. #12
    Gast
    daten war ein Beispiel für eine Variable

    Weiterrücken kann man mit dem Shift oder rotate

    Man kann auch anstatt daten.0 daten.a schreiben, wodei a dann auch ein
    Variable sein muß

  3. #13
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    31.01.2004
    Beiträge
    585
    Ja, aber kann daten nicht auch "00000001" sein?
    Weil wie soll man bei der Zahl "23" abfragen, ob eine ziffer "1" oder "0" ist ?

    MfG,
    ShadowPhoenix

  4. #14
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.01.2004
    Alter
    40
    Beiträge
    255
    Also - du musst deine Sende LED zu erst einmal mit 36kHz modulieren.
    D.h. du initialisierst deinen Timer und schaltest die led alle 13,9 us an und alle 13,9 us später wieder aus. Dann sendet das Teil immer eine 1.

    Wenn du nun eine Null senden willst, dann musst du die LED einfach ausschalten.

    Um nun ein Byte zu übertragen, musst du vom MSB (most significant bit), also das oberste Bit zuerst übertragen, dann rotierst du das Byte eins nach links und sendest dann wieder das MSB. Das machst du insgesamt 8 Mal - dann hast du dein Byte übertragen.

    Nun musst du nur noch ein Timing beachten, d.H. zum Beispiel eine 1 bedeutet, wenn die led 200 us lang mit 36 kHz. blinkt. Eine 0 bedeutet, wenn die LEd 200 us lang abgeschaltet ist.

    Damit jetzt der Empfänger weiß, wann deine Übertragung beginnt brauchst du noch einen Syncronisationsbefehl. Zum Beispiel sendest du 50 us lang eine 1. (also 50us lang blinkt die LED mit 36 kHz).

    Ich würde dir empfehlen das ganze aufzubauen, wie es bei den Phillips Fernsehgeräten ist. Die verwenden RC5. Da ist das alles geregelt.

    Hier kriegst du alle Infos über RC5.
    http://home.t-online.de/home/Holger....ge.htm?rc5.htm

    Falls dir das nicht ganz so passt kannst du es ja ein bisschen abändern, aber vom Prinzip, ist hier bereits alles vorhanden.

    Grüße
    Flite

  5. #15
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.01.2004
    Alter
    40
    Beiträge
    255
    Naja - hab ein bisschen zu lang gebraucht.

    Wie wärs, wenn du dir mal das binäre, hexadezimale und dezimale Zahlensystem zu Gemüte führst. Mit der wissenschaftlichen VErsion des Standard Rechners von Windows (in Zubehör) kannst du 23 ganz einfach in eine binäre Zahl umwandeln:

    23 dezimal = 00010111

    Grüße
    Flite

  6. #16
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    31.01.2004
    Beiträge
    585
    @Flite
    Danke!

    23 = 00010111
    Jop, jetzt verstehe ich

    Nur:
    Wie wird dann nach dem Schema...

    daten = 23
    for a = 1 to 8
    if daten.0 = 1 then
    sende 1
    else
    sende 0
    end if
    shift daten , right ,1
    next a

    ...wieder EMPFANGEN?

    MfG,
    ShadowPhoenix

  7. #17
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.01.2004
    Alter
    40
    Beiträge
    255
    Also erst mal musst du das ganze verzögern.
    Sonst läuft das viel zu schnell ab.

    Dann musst du bei sende 1 implementieren, dass die LED mit 36 kHz moduliert wird. Sonst gibt der TSOP immer 0 zurück.

    Was dir jetzt noch fehlt ist ein Startbefehl, der vor dem ganzen gesendet wird. Dieser muss eindeutig sein, darf also während der Übertragung nicht nochmals auftreten.

    Wenn du nun am Empfänger diesen empfängst, musst du nur soviele us warten, wie du beim Senden auch wartest und dann den Status des TSOPs abfragen.

    Also gewissermaßen:

    Startbefehl erkannt.
    for 1 to 8
    Wenn TSOP = 1 Dann
    empfang.0 = 1
    else
    empfang.0 = 0
    rotate empfang, left, 1
    warte XX us
    next

    So etwa sollte die empfangsroutine aussehen.
    Am besten lässt sich sowas natürlich mit einem Speicheroszi überprüfen, aber ich denke, sowas besitzt du nicht ...

    Grüße
    Flite

  8. #18
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    31.01.2004
    Beiträge
    585
    Danke!
    Eine Frage noch:
    Kann ein Fehler auch daran liegen, dass mein 12MHz Quarz ZWEI AVR's versorgt?
    Oder ist das egal?

    MfG,
    ShadowPhoenix

  9. #19
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.01.2004
    Alter
    40
    Beiträge
    255
    Hm - ein Quarz, der zwei AVRs versorgt sollte eigentlich gar nicht gehen.
    Oder ist das ein Quarzoszillator.

    Ich würde es mit 2 Quarzen versuchen, aber wenn du beide Programmieren kannst laufen die AVRs ja.

    Probier es mal mit dem Code aus, wie ich ihn ober gepostet hab.
    Evtl. laufen die AVRs auch noch mit dem inneren Takt (1 MHz), falls du die MEGA Reihe verwendest und die FUsebits noch nicht umgestellt hast.

    Grüße
    Flite

  10. #20
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    31.01.2004
    Beiträge
    585
    Ich meinte natürlich Quarzoszillatoren!
    Naja, ich verwende ein externes Programmiergerät.

    Hier meine aktuellen Codes, die leider nicht funktionieren:

    SENDER:
    Code:
    $regfile = "m8def.dat"
    $crystal = 12000000
    
    Dim Daten As Byte
    Dim A As Integer
    
    Config Portb = Output
    
    Mainloop:
    Daten = 170
    For A = 1 To 8
    If Daten.0 = 1 Then
    Gosub Send1
    Else
    Gosub Send0
    End If
    rotate Daten , Right , 1
    Waitms 500
    Next A
    Goto Mainloop
    
    Send1:
    Portb.1 = 1
    Waitms 500
    Portb.1 = 0
    Goto Mainloop
    
    Send0:
    Portb.1 = 0
    Waitms 500
    Portb.1 = 0
    Goto Mainloop
    EMPFANG:
    Code:
    $regfile = "m8def.dat"
    $crystal = 12000000
    
    Dim A As Integer
    Dim Rxdaten As Byte
    Dim Zustand As Integer
    
    Config Portd = Input
    Config Portb = Output
    
    Zustand = Pind.2
    
    Mainloop:
    For A = 1 To 8
    If Rxdaten.0 = 0 Then
    Gosub Write0
    Else
    Gosub Write1
    End If
    rotate Rxdaten , Left , 1
    Waitms 500
    Next A
    Goto Mainloop
    
    Write1:
    Portb.5 = 1
    Waitms 500
    Portb.5 = 0
    Goto Mainloop
    
    Write0:
    Portb.5 = 0
    Waitms 500
    Portb.5 = 0
    Goto Mainloop
    Was ist da falsch programmiert?
    MfG,
    ShadowPhoenix[/code]

Seite 2 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

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

12V Akku bauen