-         
RSS-Feed anzeigen

Searcher

Weiter mit der RC5 Fernbedienung, Video

Bewerten
Ich habe doch noch ein bißchen mit der Fernbedienung gespielt. Hier der gegenwärtige Stand plus Video, damit es nicht so trocken wird.

Schaltung
Code:
HW_RC5_PWM: Ferngesteuerter IR Empfänger (RC5)

              4,8V NiMh
               VCC
                +     Block- und Pufferkondensatoren n. gez.
                |
          .-----o-----------------------o----o----o--------.
          |     |           ATtiny45    |    |    |        |
    TSOP .-.    | 10k ___   1 __ 8      |    |    |        |
   36kHz | |    '----|___|--o|  |o------'    |    |        |
         | |----------------o|  |o-          |    |        |
         '-'         .------o|  |o------.    |    |Motor1  |Motor2
          '-----o----)------o|__|o-     |    |   / \      / \
                |    |      4    5      |    |  (   )    (   )
                |    | .----------------'    |   \ /      \ /
                |    | |    1 __ 18          |    |        |
                |    '-)----o|  |o-----------)----'        |
                |      '----o|  |o-----------)-------------'
                |          -o|  |o-          |
                |          -o|  |o-          |
                |          -o|  |o-          |
                |          -o|  |o-          |
                |          -o|  |o-          |
                |          -o|  |o-          |
                o-----------o|__|o-----------'
                |           9    10
                |           ULN2803A
                |
                |
               ===
               GND
BASCOM Code
Code:
'#################################################  ##############################
'File: RC5_PWM.bas
'Fernbedienung eines Dreirades mit RC5 Fernbedienung
'IDE: BASCOM-AVR Demoversion 1.11.9.8
'
'HW circuit: hw_rc5_pwm.aac
'PWM Erzeugung mit Timer1
'TSOP an PB3. BASCOM Kommando Getrc5 nutzt Timer0 !!!
'#################################################  ##############################

$regfile = "attiny45.dat"
$eepleave
$framesize = 32                         'default?
$swstack = 32                           'default?
$hwstack = 32                           'default?
$crystal = 1000000
$lib "mcsbyteint.lbx"                   'only byte and word operations

Dim Address As Byte , Command As Byte   'variables for getrc5

Dim Helperbyte1 As Byte
Dim Dummy As Byte
Dim Helperword As Word At Helperbyte1 Overlay
Dim Top As Byte
Dim Limit_slower As Byte
Dim Limit_faster As Byte
Dim Limit_low_curve As Byte
Dim Limit_high_curve As Byte
Dim Quarter_power As Byte
Dim Half_power As Byte

Config Portb = Input                    'ports initialisieren
Portb = &HFF                            'ports mit pullups auf definierten Pegel

Config Rc5 = Pinb.3                     'TSOP at PB3
Enable Interrupts                       'nötig für RC5 Empfang

Config Portb.4 = Output                 'PB4 as output, OC1B
Config Portb.1 = Output                 'PB1 as output, OC1A

Top = 249                               'OCR1C wert für PWM Frequenz
Half_power = Top
Shift Half_power , Right , 1
Quarter_power = Half_power
Shift Quarter_power , Right , 1
Limit_slower = 7
Limit_faster = Top - 8
Limit_low_curve = 3
Limit_high_curve = Top - 4


Tccr1 = Tccr1 Or &B01100000             'set PWM1A & OC1A (PB1)
Gtccr = Gtccr Or &B01100000             'set PWM1B & OC1B (PB4) clear TCNT1 on OCR1C match
Ocr1a = 0                               'initialise OCR1A -> low, no pulses at OC1A
Ocr1b = 0                               'initialise OCR1B -> low, no pulses at OC1B
Ocr1c = Top                             'set pwm frq. 1Mhz / 4 / (Top + 1)
Tccr1 = Tccr1 Or &B00000011             'set prescaler (4) switches timer on

Do
   Getrc5(address , Command)            'procedure returns FF FF if no RC5 message
   If Address <> &HFF Then              'RC5 Nachricht empfangen then...
      Command = Command And &B01111111  'toggle bit auf Null
      Select Case Command
         Case &H17 : Helperword = Ocr1a + Ocr1b       'OK Taste - geradeaus
                     Shift Helperword , Right , 1       'durch zwei teilen
                     Ocr1a = Helperbyte1
                     Ocr1b = Helperbyte1
         Case &H0F : If Ocr1a > Limit_slower And Ocr1b > Limit_slower Then
                          Ocr1a = Ocr1a - 8       'langsamer bei Pfeil nach unten
                          Ocr1b = Ocr1b - 8
                        Else
                          Ocr1a = 0     'bei Reg.überläufen Notstop
                          Ocr1b = 0
                     End If
         Case &H0E : If Ocr1a < Limit_faster And Ocr1b < Limit_faster Then
                          Ocr1a = Ocr1a + 8       'schneller bei Pfeil nach oben
                          Ocr1b = Ocr1b + 8
                        Else
                          Ocr1a = Top   'schneller geht's nicht
                          Ocr1b = Top
                     End If
         Case &H13 : If Ocr1a > Limit_low_curve And Ocr1b < Limit_high_curve Then
                          Ocr1a = Ocr1a - 4       'rechts bei Pfeil nach rechts
                          Ocr1b = Ocr1b + 4
                        Else
                          Ocr1a = 0
                          Ocr1b = 0
                     End If
         Case &H0B : If Ocr1a < Limit_high_curve And Ocr1b > Limit_low_curve Then
                          Ocr1a = Ocr1a + 4       'links bei Pfeil nach links
                          Ocr1b = Ocr1b - 4
                        Else
                          Ocr1a = 0     'bei Reg.überläufen Notstop
                          Ocr1b = 0
                     End If
         Case &H1D : Ocr1a = 0          'stop bei home Taste
                     Ocr1b = 0
         Case &H01 : Ocr1a = Quarter_power       '1/4 Gas mit Taste 1
                     Ocr1b = Quarter_power
         Case &H02 : Ocr1a = Half_power '1/2 Gas mit Taste 2
                     Ocr1b = Half_power
         Case &H03 : Ocr1a = Top        'Vollgas mit Taste 3
                     Ocr1b = Top
         Case &H37 : Ocr1a = 0          'Pirouette rechts mit Taste Audio
                     Ocr1b = Top
         Case &H36 : Ocr1a = Top        'Pirouette links mit Taste View
                     Ocr1b = 0
'for quick and dirty tests
         Case &H08 : Ocr1c = 249        'PWM Frequenz auf 1000 mit Taste 8
         Case &H07 : Ocr1c = Ocr1c - 10 'erhöhe PWM f in 40Hz Schritten; Taste 7
         Case &H09 : Ocr1c = Ocr1c + 10 'decrease PWM f in 40Hz Schritten; Taste 9
      End Select
   End If
   Waitms 30                            'Änderungen nicht zu schnell bei gehaltener Taste
Loop

"Weiter mit der RC5 Fernbedienung, Video" bei Twitter speichern "Weiter mit der RC5 Fernbedienung, Video" bei Facebook speichern "Weiter mit der RC5 Fernbedienung, Video" bei Mister Wong speichern "Weiter mit der RC5 Fernbedienung, Video" bei YiGG.de speichern "Weiter mit der RC5 Fernbedienung, Video" bei Google speichern "Weiter mit der RC5 Fernbedienung, Video" bei del.icio.us speichern "Weiter mit der RC5 Fernbedienung, Video" bei Webnews speichern "Weiter mit der RC5 Fernbedienung, Video" bei My Yahoo speichern

Aktualisiert: 02.04.2011 um 17:41 von Searcher

Stichworte: - Stichworte bearbeiten
Kategorien
Projekte , ATtiny45 , Root , Linienfolger

Kommentare

  1. Avatar von PICture
    Hallo Searcher!

    Kurz gesagt finde ich es toll, weil so einfach (laut Schaltplan) ist.

    Es scheint leider, dass der µC Virus dich unheilbar befallen hat.

    Ich bewundere, was du schon jetzt mit dem µC als Anfänger machen kannst, da es bei dir für mich unglaublich schnell vorwärts geht.

    Vieeel Spass und Erfolg weiterhin.
    Aktualisiert: 27.03.2011 um 21:37 von PICture
  2. Avatar von Searcher
    Hallo PICture,
    vielen Dank für Deinen netten Komentar! Was zum Ausbruch meiner Viruskrankheit geführt hat wissen wir doch, oder? Es macht mir wirklich Spaß und es scheint, daß mir das Programmieren besser liegt als die Elektronik und ich da schneller was hinbekomme. Liegt vielleicht daran, daß ich früher auf C64 mit Assembler /BASIC und später auf PC mit Turbo Pascal und Visual Basic schon anfängerprogrammiert habe und bis vor ca 2 Jahren nicht versucht habe eigene Schaltungen zu stricken sondern immer nur gelegentlich nachgebaut habe.

    Das der Schaltplan so einfach geworden ist, hat mich auch überrascht (Möglicherweise beginnt Dein Einfluß so langsam bei mir im Unterbewußtsein zu wirken ). Der ULN hat ja schon Vorwiderstände und Freilaufdioden mit drin und noch viel Platz für weitere Anschlüsse. Da hat der Tiny mir jetzt schon zu wenige Pins und ich war schon ernsthaft am Überlegen mit TTL Grab da auch noch zB einen Rückwärtsgang einzubauen. Ich könnte es mir ja mit einem größeren µC einfach machen - das reizt mich aber irgendwie nicht. Als nächstes kommen da aber vermutlich erst die Photodioden zur Linienverfolgung dran. Der Ausgang ist ungewiß, da ich nach meinen eigenen Vorgaben scheinbar gezwungen bin, ein Bein auf den ADC Anschluß zu legen, der auch gleichzeitig RESET ist. Praktisch geht das - ob die Messung aber dann noch gut genug ist? Mal sehen.

    Gruß
    Searcher
  3. Avatar von PICture
    Hallo Searcher!

    Ich habe, wie auch immer, nur das geschrieben, was ich ged8 habe, aber wenn du es nett findest ...

    Was jemandem am besten liegt muss er selber entscheiden. Ich wollte beispielweise auch mit AVR und BASCOM spielen, für mich scheint jedoch jede Hochsprache zu komplex um einzelne Bits, wie von mir gewünscht, zu manipulieren, wenn ich nicht genau weiss, wo sie im RAM sind. Meiner Natur gefällt leider nur ASM, den ich auch auf dem C64 gelernt habe, deshalb habe ich es unterworfen. Ich fühle mich auch gar nicht schuldig, dass ich dich verlässig zum µC's gelenkt habe.

    Mein Sohn hat z.B. Informatik gelernt, weil ihm wieder die Elektronik nicht liegt. Wichtig ist eben, dass man mit Spass mit etwas spielt und keine positive Ergebnisse erwartet. Ich habe nie gewusst, wie von mir Geplanntes ausgeht, deswegen kenne ich bisher kein Frust und musste, wie du, leider nicht einmal eigene Effekte bewundern.

    Laut amerikanischen Forscher um kreativ zu bleiben, darf man nie erwachsen werden ...

    Deine "Mal sehen" habe ich immer gesagt, wenn mir jemand ein neues Thema für Entwicklung vorgeschlagen hat. Ich bin wirklich glücklich, weil ich im Leben nix machen "musste", sondern immer wirklich "wollte". Dafür musste ich leider immer etwas neues lernen um meine "verrückte" Ideen realisieren zu können.

    Schauen wir, immer mit Hoffnung, wie's uns Minimalisten weiter geht.
  4. Avatar von Searcher
    Hallo PICture,
    nett war vielleicht nicht der richtige Ausdruck. Ich freute mich, daß du einen Kommentar geschrieben hast, der auch noch so positiv für mich ist .

    Ich sehe immer noch so viele Ecken im Projekt, sei es im Code, in der Mechanik oder sonst wo, daß ich damit nicht gerechnet hatte. Beispiel: PORTB = &HFF -> Port hat aber nur sechs PINs -> Was passiert mit den zwei überflüssigen Bits? Aber egal funktioniert erstmal und hab es doch jetzt auf &HeinsF geändert, weil ich auch den PBfünf - RESET nicht anrühren will. Gerade bin ich dabei herauszufinden, warum das Ding bei Geradeausfahrt einen Linksdrall hat. Nach Überprüfung der Lager und Getriebespiels, könnte es eigentlich nur noch 1 etwas schlechterer Motor sein. Muß ich mal umtauschen...
    ...Hochsprache zu komplex um einzelne Bits, wie von mir gewünscht, zu manipulieren, wenn ich nicht genau weiss, wo sie im RAM sind...
    In BASCOM habe ich kleinere Probleme bei den hardwarenahen Befehlen wie zB CONFIG TIMER. Da blicke ich nicht durch, was genau passiert und setze dann die Register "per Hand" direkt. Kann man dann ganz gut im Simulator beob8en . Bedeutet zwar eine Wühlerei im Datenblatt aber ohne dem kommt man sowieso nicht aus. Ansonsten hab ich mich schon fast dran gewöhnt.
    Ich fühle mich auch gar nicht schuldig, dass ich dich verlässig zum µC's gelenkt habe.
    Ich bin froh, daß Du das gemacht hast - leider bleibt weniger Zeit für Elektronik und Mechanik aber ich lese, wenn ich sie erwische, immer Deine Beiträge. Vielleicht drehst Du mich wieder um; bloß erstmal nicht zu ASM. Das hab ich damals gemacht, weil mir das Interpreter Basic zu langsam war.

    schaun ma moi
  5. Avatar von Frank
    Schöner sauber aufbereiteter Blog, muss ich mal sagen! So stelle ich mir einen interessanten hilfreichen und lesenswerten Blog vor!