-         

Ergebnis 1 bis 4 von 4

Thema: Ich möchte den ds1307 über eine RC5 Fernbedienung beschreiben.

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    07.01.2006
    Beiträge
    31

    Ich möchte den ds1307 über eine RC5 Fernbedienung beschreiben.

    Anzeige

    Hallo Ich habe mir eine Uhr mit Bascom gebastelt. Alles funktioniert eigentlich. Aber der DS1307 muss auch irgendwann nachgestellt werden.
    Da ich keine andere Möglichkeit habe würde ich das gerne mit einer RC5 Fernbedienung machen.

    Leider schaffe ich es nicht und hoffe auf Eure Hilfe.

    Ich stelle es mir so vor. Ich tippe die Zahlen der Reihe nach in die Fernbedienung und mit der OK Taste werden die Daten in den DS1307 übernommen. Über ein/aus möchte ich noch ein und ausschalten.

    Code:
    HTML-Code:
    $regfile = "m16def.dat"                                     'ATmega 16
    $crystal = 8000000                                          'Quarz: 8 MHz$baud = 9600$lib "mcsbyte.lbx"                                          ' for smaller code$lib "ds1307clock.lib"                                      '  lib
    
    Config Rc5 = Pind.2
    Dim Ein_aus As Bit
    Dim Zeit As Byte
    'Dim Time$ As String * 8'Time$ = "17:37:00"
    
    Enable Interrupts
    
    
    Dim Address As Byte , Command As Byte
    Print "Waiting for RC5..."
    
    Do
    
    
      Getrc5(address , Command)
    
    If Address = 0 Then          Command = Command And &B01111111
          If Command = 32 Then              If Ein_aus = 1 Then                 Ein_aus = 0              Else                 Ein_aus = 1              End If        End If      Waitms 500     Print "Status " ; Ein_aus    End If
      Select Case Command
        Case 16 : Print "0" ; Zeit = 0    Case 17 : Print "1"    Case 18 : Print "2"    Case 19 : Print "3"    Case 20 : Print "4"    Case 21 : Print "5"    Case 22 : Print "6"    Case 23 : Print "7"    Case 24 : Print "8"    Case 25 : Print "9"    Case 40 : Print "ok"    Case 19 : Print "3"    Case 20 : Print "4"    Case 21 : Print "5"    Case 22 : Print "6"    Case 23 : Print "7"'    Case Else : Print "Not in Case statement"
    
      End Select
    
    
    
    Loop
    End

    Ich schaffe es nun, die Zahlen einzeln am Terminal auszugeben, habe aber keine Ahnung wie die Zahlen zusammengefasst werden. Zum Beispiel in 1230 für 12 Uhr 30

    Ich bitte um Hilfe.

    Gruß

    Rici

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.09.2009
    Ort
    Berlin (Mariendorf)
    Beiträge
    938
    Du musst die numerischen Wertentsprechungen der per RC5 übertragenen Ziffern ermitteln. Das geht über die schon verwendete CASE-Struktur oder, indem man den Offset (RC5-Code der Ziffer "0") von den RC5-Zifferncodes abzieht. Laut deinem Codebeispiel scheint der Offset = 16 zu sein.
    Recht viel mehr braucht man gar nicht tun, weil die DS1307 ja mit BCD-Darstellung arbeitet. Sollte Bascom allerdings die Stunden/Minuten/Sekunden als zweistellige Zahlen erwarten, berechnet man eben die Ziffernfolge "1", "2" als 1*10 + 2*1 = 12

    Gruß
    RoboHolIC

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    07.01.2006
    Beiträge
    31
    Danke Robo,

    das mit dem Offset, tolle Idee. Habe ich auch gleich umgesetzt.
    Das mit den mehrstelligen Zahlen ist auch genial. Leider schaffe ich es nicht, dass umzusetzen.

    Ich habe da eine do loop Schleife. Da komme ich so nicht weiter.
    Ich habe es mir so vorgestellt:
    Ich drücke die Menü Taste. Diese hat den Code 25. Damit aktiviere ich das Einstellen der Uhr.
    Dann kann ich über die Zifferntasten zum Beispiel 1235 für 12:35 eingeben.
    Wenn die entsprechende Sekunde erreicht ist, drücke ich OK (Code 24) und die Daten werden in den DS1307 geschrieben.
    Ich schaffe es nicht, die Codes in diesem Fall 1235 in eine Variable zu bringen.

    Hier mein Code:

    $regfile = "m16def.dat" 'ATmega 16


    $crystal = 8000000 'Quarz: 8 MHz
    $baud = 9600
    $lib "mcsbyte.lbx" ' for smaller code
    $lib "ds1307clock.lib" ' lib




    Config Rc5 = Pind.2


    Enable Interrupts


    Dim Address As Byte , Command As Byte


    Do


    Getrc5(address , Command)




    If Address = 0 Then
    Command = Command And &B01111111
    Command = Command - 16
    Print "command " ; Command
    End If


    Waitms 200




    Loop


    End

    Danke und Grüße

    Rici

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.09.2009
    Ort
    Berlin (Mariendorf)
    Beiträge
    938
    Hallo Rici.

    Der Fortschritt mit dem Offset ist doch schon mal was!

    Für die weitere Verarbeitung kannst du drei Wege beschreiten: Entweder eine blinde Eingabe von zwei (vier) Ziffern, Umrechnung und erst dann Übernahme der Zahl(en) in die RTC; oder jeden RC5-Empfang sofort einarbeiten: empfangenes Zeichen dekodieren, Byte mit zwei BCDs von der RTC holen, Bitmanipulation mit SHIFT, AND und OR, danach Byte zurückschreiben in die RTC. (verarbeitet Bascom bei der RTC Ziffern oder Zahlen ?) Im letzteren Fall kann es auch ohne Fehleingaben zu unstimmigen Werten kommen: wenn man von 17 Uhr auf 23 Uhr korrigiert, würde nach der ersten "2" nämlich "27:00" Uhr dastehen (fängt Bascom dergleichen ab?). Ich habe keinen Schimmer, was die DS1307 damit machen würde. Wenn es dir nicht zu viel Aufwand ist, probiere es aus, es ist ja doch die elegantere Eingabeoption.
    In jedem Fall sollte man auch eine Plausibilitätskontrolle der Werte machen. Das gilt auch für die blinde Eingabe von zwei bzw. vier Ziffern.

    Die dritte Möglichkeit wäre die inkrementelle Eingabe, wie sie bei Stand-Alone-Weckern , Armbanduhren etc. üblich ist: aktuelle Zahl holen, inkrementieren oder dekrementieren, ggf. Rollover/Rollunder bearbeiten, zurück in die RTC. Die Steuerung könnte so aussehen: Cursor hoch/runter +/- eine Stunde; Cursor links/rechts -10 / +1 Minute.

    Vielleicht gehen meine Beiträge auch etwas an deiner Bascom-Realität vorbei. Ich habe damit keinerlei Erfahrung damit, weil ich ausschließlich mit PIC-Controllern und Assembler arbeite und daher alles "zu Fuß" mache. Derzeit steht mein erstes RTC-Projekt mit einer DS1307 vor der Vollendung: Der TRAUMINATOR - ein Wecker und Nickerchen-Timer mit der Option zu "multimedialen" Wecksignalen: Rütteln, pusten, Ding-Dong-Klingel etc. und natürlich auch ein Piepser (, den ich bei käuflichen Weckern aber oft nicht höre, wenn ich auf dem falschen Ohr liege!!! Das war auch die Triebkraft zur Entwicklung eines eigenen bedarfsgerechten Schlafterminierungssystems). Bedient wird er lediglich mit drei Tasten - geht alles.

    Gruß
    RoboHolIC

Ähnliche Themen

  1. Ich möchte mir eine Steuerbare Sitzplatte bauen .
    Von HandyRipper im Forum Konstruktion/CAD/Sketchup und Platinenlayout Eagle & Fritzing u.a.
    Antworten: 5
    Letzter Beitrag: 30.10.2009, 18:36
  2. Ich möchte eine Neuses Thema aufmachen, Fehler (Anfänger)
    Von jojo.glaser im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 20.12.2006, 00:48
  3. Wie stelle ich den rp5 auf meine fernbedienung ein
    Von sebi2011 im Forum Robby CCRP5
    Antworten: 1
    Letzter Beitrag: 17.09.2005, 22:41
  4. Ich möchte eine Kugelmaus als Drehgeber verwenden.
    Von Bastlwastl im Forum Sensoren / Sensorik
    Antworten: 27
    Letzter Beitrag: 08.08.2004, 19:39
  5. Ich möchte eine Robotter...
    Von Lord_Dante im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 7
    Letzter Beitrag: 06.03.2004, 21:50

Stichworte

Berechtigungen

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