-
Juhu, lag ja noch nichtmal soo falsch :cheesy:
Da ich mich nochnicht soo lang mit AVRs beschäftige ist das alles nicht ganz einfach für mich.
Alsu muss ich jetzt erstma gucken wie ich das mit dem Vorteiler in Bascom mache, und dann gucken was CTC ist.
Das Togglebit muss ich ja auch jedesmal noch ändern.
Man man ist garnicht so einfach.
Ein Codebeispiel wäre echt sehr hilfreich, dürften ja eig. nur ein paar Zeilen sein.
Aber ich such trotzdem mal weiter!
-
Der Blink-test:
Code:
$regfile = ""
$crystal = 9600000
Config Timer0 = Timer, Prescale = 8
Led3 Alias Portc.2
Config Led3 = Output
On Timer0 Timer_irq
Const Timervorgabe = 256-33 ' ;-)
Enable Timer0
Enable Interrupts
'Hier ist die Programmhauptschleife
Do
'Hier könnte Ihr Hauptprogramm stehen
Loop
Timer_irq:
Timer0 = Timervorgabe
Toggle Led3
Return
Habe das jetzt nur schnell zusammenkopiert (ungetestet), oben nur noch die richtige .DAT-Datei einbauen, und den richtigen AusgangsPort angeben, dann sollte das mit dem 36kHz Blinken funktionieren.
Edit:
Timerwert Stimmte ja garnicht, ist aber jetzt ausgebessert ;-)
-
Das haste bestimmt getestet gibts zu ;)
Funktioniert, die LED geht ganz schnell an und aus, danke!
Jetzt muss ich in der Sub immer die Bits ausgeben (mit ner If abfrage und einer Laufvariablen, damit ich nicht immer das gleiche ausgebe).
Ich geh jetzt erstmal schalfen, bin total müde, ich setzt mich morgen mal dran!
Hab noch son eine Frage zum Timer. Return setzt den µC ja immer wieder an die letzt bearbeitete Stelle im Hauptprogramm zurück, aber kann ich diese Stelle auch irgentwie vorgeben?
Das ich ihn z.b. vor eine IF abfrage stelle (wegen meinen verschiedenen Programmen beim Lauflicht).
Ich wollte den IR Emfang per Interrupt lösen (wenn er RC5 identifiziert), aber er soll dann halt direkt das akt. Programm beenden, und nicht noch erst bis es einmal durch ist.
Naja ich hoffe ihr versteht was ich auszudrücken versuche.
Dankeschön ;)
-
Hab das nicht probiert, ehrlich [-X :-)
kannst Du das mal probieren, dann geht das geblinke automatisch, da ich keinen T13 da hab, und es sich für den Mega8 so nicht kompilieren lässt, kann ich das auch nicht testen :-)
Die LED muss dann aber an PortB0 sein, da das er OC0A Ausgang ist !
Code:
$regfile = "Attiny13.dat" ' the used chip
$crystal = 9600000
Config Portb.0 = Output
Config Timer0 = Pwm , Prescaler = 8 , Compare A = Toggle , Clear Timer = 1
Ocr0a = 33
Do
Loop
End
Wenn das klappt, muss man nur noch mit Start/Stop Timer0 den Timer ein-/ausschalten, je nachdem ob man High oder Low ausgeben will.
Evtl. noch mit Deinem Oszi messen ob es auch 36kHz sind, also der Abstand der Flanken ca. 28µs hat, so wie letztens in deinem Bild oben.
PS:
kannst Du deine grossen Bilder oben entfernen, und evtl. nur den Link dahin angeben, das verzieht sonst das schöne RN-Layout !
-
Hallo, schön, das es klappt, vielleicht ein Tip von mir,anstatt den Timer ein und auszuschalten, würde ich die Katode der Diode an einem Freiem Pin hängen und in der Interruptroutine ein und ausschalten(natürlich nicht bei jeden Überlauf, sonderen nach jedem 32) je nachdem ob die LED High oder LOW sein muß, ich hoffe Ihr versteht was ich meine...
Gruß Sebastian
-
Beim ASURO ist es auch so gemacht mit der IR LED, zwischen TxD und OC2.
Wenn er die Leistung der LED ausnutzen will, muss er aber noch etwas an elektronic dazu bauen.
Kann er aber machen wie ein Dachdecker, oder wie das hier heisst :-)
-
So ich hab den Code mal probiert, das Oskar zeigt aber nur einen senkrechten Strich na mit "leichten" Lücken.
Warum er nicht vertical ist versteh ich auch nicht.
Oder soll die Led jetzt mit der anderen Seite noch an Tsd?.
Zurzeit hab ich die Anode per Widerstand an Vcc, und die Kathode per Transistor gegen GND.
Muss ich den Timer nicht noch starten?
-
Die Schaltung sollte zum ausprobieren der Frequenz schon passen, erst später evtl. den 2. Pin auch an den AVR.
Hast Du das mit dem Start Timer auch gemacht ?
-
ne nur so wie du es oben gepostet hast!
-
Sorry ich hab es grad 2 Stunden versucht, aber ich bekomm den Aufbau einfach nicht hin.
Sagen wir mal der Timer überäuft, die Subroutine setzt den Port auf 1, dann läuft er wieder über, und ich setzte den Port wieder 0 oder?
Und mit dem Hauptprogramm frag ich noch per Endlosschleife ab, ob die Sendetaste gedrück wurde, der als Bedingung mit der Subroutine zum senden verknüft wird.
Und zusätzlich brauch ich ja auch noch ein Sleep Modus damit die Batterie nicht direkt leer ist.