- 12V Akku mit 280 Ah bauen         
Seite 2 von 10 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 95

Thema: RC5 Senden mit Attiny13

  1. #11
    Benutzer Stammmitglied
    Registriert seit
    22.11.2007
    Beiträge
    57
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Dass es mit dem Tiny2313 funktioniert bzw. dass ich es programmieren könnte sage ich mal vorsichtig ja.

    RC5Send braucht den timer1 sprich 16 bit timer das es funktioniert, den hat der attiny13 leider nicht.

    2313 ist zu groß, das ganze sollte möglichst klein sein, da es zur indentifizierung von mini z fahrzeugen eingesetzt werden soll.

    Hab am Dachboden eine kleine Mini Z Bahn und die soll mit einer zeitnehmung ausgestattet werden. muß nicht irrsinnig genau sein, ist einfach nur aus spaß an der freude.

    Mfg
    Harry

  2. #12
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Nochmal hallo

    Zum programm, wenn ich mit einem timer die 38kHz Trägerfrequenz mache kann ich dann nicht die bits ausgeben wie sie in meiner schleife sind oder?
    Es wird dann immer noch nicht klappen, denn die Bits sind nicht einfach high oder low, vielmehr muss ein Wechsel von low nach high für Bit gesetzt und von high nach low für nicht gesetzt gesendet werden:
    http://www.sbprojects.com/knowledge/ir/rc5.htm

    [Edit] Oh, das hast du ja drin[/Edit]

    Am Besten noch etwas googeln... (oder abwarten bis ich es gelöst habe, aber mein Projektrückstau ist schon jetzt enorm)

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #13
    Benutzer Stammmitglied
    Registriert seit
    22.11.2007
    Beiträge
    57
    den wechsel zw. hi und lo hab ich schon... heißt angeblich manchester codierung.....

    Google.... naja, hab das alles schon für pic gefunden, nur fang ich beim atmel ja nix an zumindest kann ich assembler nicht in basic umsetzen...

    guckst du...


    http://sprut.de/electronic/pic/programm/irrc/irrc.html


    mfg harry

  4. #14

  5. #15
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    http://www.mikrocontroller.net/topic/63154

    Blöderweise kenne ich Bascom überhaupt nicht. Interessant finde ich diesen Abschnitt:

    Code:
    Config Timer0 = Timer , Prescale = 8
    On Timer0 Timer_irq
    Const Timervorgabe = 256 - 33
    
    Enable Timer0
    Enable Interrupts
    Wenn man hier nun meine vermuteten Daten einsetzen würde:

    Prescale=1
    Const Timervorgabe = 126

    Und als Interruptroutine vielleicht so:

    Timer_irq:

    'exclusive oder bzw negieren, ich weiß nicht wie das in Bascom formuliert wird, in c würde man Portb.4 ^=Portb.4 schreiben'
    Portb.4 = not Portb.4
    return

    Und dann deinen Code für das Senden der Bits dazu an Portb.3 (und den Portb.4-Zugriff entfernen!), zwischen den Ports die LED (mit Widerstand!) mit Anode an Portb.3, Kathode an Portb.4...

    Nach dem Senden mit Portb.3=0 und Disable(?) Timer0 die LED wieder ausschalten. Fraglich ist, ob "Waitms 0.889" genau genug ist. Und noch nicht beantwortet ist der /8-Teiler in den Fuses fürdie 9,6Mhz.

    Zitat aus den Thread:
    aber die IR Diode leuchtet in einen so
    niedrigen Intervall das man es noch über ein Multimeter sehen kann,
    mit dem Multimeter sieht er nur die Bits, aber nicht die Trägerfrequenz, die er ja auch gar nicht hat.

    mic

    [Edit]

    Mist, der bascom-Timer zählt aufwärts, deshalb:

    Const Timervorgabe = 256-126

    Ich befürchte, der Interrupt-Overhead beim Sichern der Register bei Bascom wird zu groß sein (hab ich irgendwo mal aufgeschnappt) und deshalb wird sich der tiny wohl aufhängen.
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  6. #16
    Benutzer Stammmitglied
    Registriert seit
    22.11.2007
    Beiträge
    57
    Zurzeit sieht mein Quellcode so aus...

    geht das man die interrupt routine so rein setzt?


    $regfile = "ATtiny13.dat"
    $crystal = 9600000
    $hwstack = 32
    $swstack = 8
    $framesize = 16

    Config Portb.4 = Output

    Config Timer0 = Timer , Prescale = 8
    On Timer0 Timer_irq
    Const Timervorgabe = 256 - 126

    Enable Timer0
    Enable Interrupts
    Dim A As Integer
    Do



    Timer_irq:
    A = 0.889
    Portb.4 = 0
    Portb.3 = 0 'bit1'
    Waitms A
    Portb.4 = 1
    Portb.3 = 1
    Waitms A

    Portb.4 = 0
    Portb.3 = 0 'bit2'
    Waitms A
    Portb.4 = 1
    Portb.3 = 1
    Waitms A

    Portb.4 = 1
    Portb.3 = 1 'bit3'
    Waitms A
    Portb.4 = 0
    Portb.3 = 0
    Waitms A

    Portb.4 = 1
    Portb.3 = 1 'bit4'
    Waitms A
    Portb.4 = 0
    Portb.3 = 0
    Waitms A

    Portb.4 = 1
    Portb.3 = 1 'bit5'
    Waitms A
    Portb.4 = 0
    Portb.3 = 0
    Waitms A

    Portb.4 = 1
    Portb.3 = 1 'bit6'
    Waitms A
    Portb.4 = 0
    Portb.3 = 0
    Waitms A

    Portb.4 = 1
    Portb.3 = 1 'bit7'
    Waitms A
    Portb.4 = 0
    Portb.3 = 0
    Waitms A

    Portb.4 = 1
    Portb.3 = 1 'bit8'
    Waitms A
    Portb.4 = 0
    Portb.3 = 0
    Waitms A

    Portb.4 = 1
    Portb.3 = 1 'bit9'
    Waitms A
    Portb.4 = 0
    Portb.3 = 0
    Waitms A

    Portb.4 = 1
    Portb.3 = 1 'bit10'
    Waitms A
    Portb.4 = 0
    Portb.3 = 0
    Waitms A

    Portb.4 = 1
    Portb.3 = 1 'bit11'
    Waitms A
    Portb.4 = 0
    Portb.3 = 0
    Waitms A

    Portb.4 = 1
    Portb.3 = 1 'bit12'
    Waitms A
    Portb.4 = 0
    Portb.3 = 0
    Waitms A

    Portb.4 = 1
    Portb.3 = 1 'bit13'
    Waitms A
    Portb.4 = 0
    Portb.3 = 0
    Waitms A

    Portb.4 = 0
    Portb.3 = 0 'bit14'
    Waitms A
    Portb.4 = 1
    Portb.3 = 1
    Waitms A

    Loop

    Return


    Is noch imma mit testled, da auf testplatine fest verlötet...

    Mfg Harry

  7. #17
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Ich dachte immer, basic würde ich nie mehr verwenden.*grins* Aber es kommt eben immer anders als man denkt.

    Ich hab' mich nun auf die Schnelle im RN-Wissen zum Thema Bascom etwas eingelesen, aber bitte keine Wunder erwarten:

    Code:
    'RC5-Code senden mit ATtiny13                         11.12.2007'
    
    $regfile = "ATtiny13.dat"
    $crystal = 9600000
    $hwstack = 32
    $swstack = 8
    $framesize = 16
    
    Dim A As Integer 
    
    Config Portb.3 = Output 'beide Pins als Ausgang'
    Config Portb.4 = Output 'nur wenn Portb.3=1 und Portb.4=0 leuchtet LED'
    
    Config Timer0 = Timer , Prescale = 1 '9600kHz/76kHz gibt 126,31'
    On Timer0 Timer_ISR
    Timer0 = 256 - 126 'Timer mit Startwert für 76kHz laden'
    
    Enable Timer0
    Enable Interrupts
    
    Timer_ISR:        'Interruptroutine'
    	Toggle Portb.4 'Pin umschalten'
    Return
    
    A = 0.889 'halbe Bitlänge RC5'
    
    Do
    
    	Portb.3 = 0 'bit1'
    	Waitms A
    	Portb.3 = 1
    	Waitms A
    
    	Portb.3 = 0 'bit2'
    	Waitms A
    	Portb.3 = 1
    	Waitms A
    
    	Portb.3 = 1 'bit3'
    	Waitms A
    	Portb.3 = 0
    	Waitms A
    
    	Portb.3 = 1 'bit4'
    	Waitms A
    	Portb.3 = 0
    	Waitms A
    
    	Portb.3 = 1 'bit5'
    	Waitms A
    	Portb.3 = 0
    	Waitms A
    
    	Portb.3 = 1 'bit6'
    	Waitms A
    	Portb.3 = 0
    	Waitms A
    
    	Portb.3 = 1 'bit7'
    	Waitms A
    	Portb.3 = 0
    	Waitms A
    
    	Portb.3 = 1 'bit8'
    	Waitms A
    	Portb.3 = 0
    	Waitms A
    
    	Portb.3 = 1 'bit9'
    	Waitms A
    	Portb.3 = 0
    	Waitms A
    
    	Portb.3 = 1 'bit10'
    	Waitms A
    	Portb.3 = 0
    	Waitms A
    
    	Portb.3 = 1 'bit11'
    	Waitms A
    	Portb.3 = 0
    	Waitms A
    
    	Portb.3 = 1 'bit12'
    	Waitms A
    	Portb.3 = 0
    	Waitms A
    
    	Portb.3 = 1 'bit13'
    	Waitms A
    	Portb.3 = 0
    	Waitms A
    
    	Portb.3 = 0 'bit14'
    	Waitms A
    	Portb.3 = 1
    	Waitms A
    
    Loop
    Quellcode sollte man immer in code-Tags posten.

    Wichtigste Änderung ist, dass die ISR (Interruptserviceroutine) nun nicht mehr das gesamte Programm beinhaltet.

    Zum Timer:
    Der Timer zählt vom Startwert bis zum Überlauf (8Bit=255 beim tiny13), erzeugt dann einen Interrupt und wird wieder mit dem Startwert geladen. In der ISR wird der Portb.4 mit dem Toggle (ist scheinbar ein bascom-Befehl) umgeschaltet. Es gibt aber scheinbar auch die PWM-Anwendung mit "Config Timer0 = Pwm...". Deshalb vermute ich, dass es auch eine CTC-Variante dazu gibt. Die wäre für unsere Anwendung optimal geeignet.

    Hauptprogramm:
    Hier werden dann die RC5-Bits an Portb.3 ausgegeben. Damit das funktioniert muss die LED (Widerstand nicht vergessen!) zwischen Portb.3 und Portb.4 angeschlossen sein. Wenn Portb.3=0(0V) ist, spielt der Pegel an Portb.4 keine Rolle. Wenn Portb.3=1(5V) ist, leuchtet die LED wenn Portb.4=0 ist, bei Portb.4=1(5V) ist sie dann aus. Ob die Bitfolge passt, habe ich noch nicht überprüft. Am Ende der Hauptschleife sollte man vielleicht vor der Wiederholung noch ein längeres Wait einfügen.

    Ich habe keine Ahnung, ob das Programm so übersetzbar ist, ob es funktioniert weiß ich natürlich auch nicht.

    Sehr wichtig ist (ich muss es einfach nochmal ansprechen, weil ich immer noch keine Aussage dazu habe), dass der interne Taktteiler in den Fuses ausgeschaltet ist und der tiny13 wirklich mit 9,6MHz läuft. Möglicherweise muss man noch den Timerstartwert anpassen um die Ungenauigkeiten des internen Taktgebers auszugleichen. Ob die Wait-Funktion von Bascom überhaupt so verwendet werden kann, kann ich auch nicht sagen. So wie im Moment wird es auf jeden Fall nicht funktionieren, denn A ist als Integer festgelegt...

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  8. #18
    Benutzer Stammmitglied
    Registriert seit
    22.11.2007
    Beiträge
    57
    Serwus,

    Okay, da habe ich was vergessen, A als integer ist ja eine ganze Zahl, d.h.: 0,889 wird 1 wenn ich mich nicht irre.

    Werd dann einfach wieder 0,889 überall einsetzen.

    Die Tinytestplatine etwas modifizieren.

    Programm brennen.

    Und mal schaun was das Oszi so von sich gibt!

    Hab mir Gestern schon gedacht dass das Signal etwas lang ist 0,889 = 1
    dann habe ich 0.4445 eingesetzt und dann war nur mehr rauschen am Monitor!

    Wobei ich aber auch nicht weiß ob eine Frequenz von 38kHz auf einem "SoftwareOszi über Soundkarte" überhaupt darstellbar ist.

    Theoretisch ja, denn 44,1kHz wären möglich, aber jede Soundkarte hat ja eine Wechselspannungsunterdrückung mit einem Kondensator am Eingang dass das Signal sehr verzerrt wird....

    Aber ich lass mich überraschen, nach dem umbau!

    Werd das ganze einfach auf einer Klemmplatine aufbauen um diverse Veränderungen des Schaltplans schnell durchführen zu können.

    Mfg
    Harry

  9. #19
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Guten Morgen Harry

    Ich habe mir gerade die B ascom-Doku runtergeladen. Ich muss sagen, sehr aufschlussreich. Ich hätte nicht gedacht, dass Bascom so mächtig ist. Was ich noch nicht weiß: Ist der erzeugte Code auch so mächtig.

    In der Beschreibung der Timer unter "Timer1" wird die Anwendung der Match-Compare-Modi beschrieben. Das ist genau die Funktion, die wir benötigen (beim tiny13 ist es der Timer0). Je ein Compare-Register für die Trägerfrequenz und das Bittiming. Damit kannst du unseren bisherigen Code auf den Müll kicken.

    Vermutlich must du aber das Layout deiner Schaltung ändern. Um die Timerfunktion nutzen zu können, muss die LED zwingend zwischen den Pins OC0A(PB0, Pin5) und OC0B(PB1, Pin6) angeschlossen sein. Es ist völlig egal, wie rum die LED angeschlossen wird, du hast da also völlige Freiheit. Aber wir müssen es festlegen, bevor wir es programmieren. Ob wir später die Bits wirklich per CTC versenden ist noch nicht sicher, aber so haben wir immer die Option offen, es zu tun. waitms werden wir dann nicht verwenden. Die Trägerfrequenz werden wir aber sicher so erzeugen.

    Da ich heute beruflich unterwegs sein werde, wird es frühestens heute Abend ein Update des Codes geben. In der Zwischenzeit kannst du dir schon mal überlegen, welche Daten du überhaupt versenden willst, also welche Bitmuster es sein werden. Da wir bisher nur zwei der Pins belegen, können wir vielleicht die restlichen Pins für einen Tasteneingang (mit dem ADC auch mehrere Tasten) oder eine Codierung verwenden. Mit einer Codierung mit drei Bits hätten wir die Möglichkeit, mit dem selben Programm bis zu sieben verschiedene Funktionen wie z.B. IDs zu erzeugen, mit zwei Codierbits und einem Taster wäre es noch vier IDs.

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  10. #20
    Benutzer Stammmitglied
    Registriert seit
    22.11.2007
    Beiträge
    57
    Guten Morgen, Mic!

    Werde das layout ändern, sprich die schaltung auf der laborsteckkarte aufbauen.

    Und mal die Doku genauer lesen!

    Wie siehts den mit dem maximal Strom an den Ausgängen aus?

    Finde einfach nichts aussagekräftiges im Netz!

    Sind bis zu 50mA realistisch?

    Mfg Harry

Seite 2 von 10 ErsteErste 1234 ... LetzteLetzte

Berechtigungen

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

12V Akku bauen