Werbung
Na dann: Viel Erfolg.
CTC bedeutet, der Timer zählt von 0 bis zu dem Wert in OCR0X. Beim Erreichen von OCR0X startet er wieder bei 0 und der Interrupt wird ausgelöst. Das Zählregister TCNT0 muss dabei nicht korrigiert werden!der Zähler wird wieder im CTC Betrieb betrieben und
OCRA0= 256-(66:2)=223
TCNT0=256-66+3("Für das Laden des Zählregisters")
Im normalen Modus (und auch im PWM-Mode) zählt der Timer bis zum Überlauf und startet dann wieder bei 0. Hier muss man die Anzahl der Zähltakte bis zum Überlauf berechen und gegebenfalls auch das Zählregister korrigieren. Diese Betriebsart verwenden wir aber nicht.
Gruß
mic
![]()
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
also wenn der Zähler von dem Wert OCR0X auf 0 springt toggelt er den Ausgang und löst den Interrupt aus oder? aber da dies mit 72kHz getoggelt wird habe ich dann nicht 36kHz? ich brauche aber 72kHz oder wird der Minesweeper-Schwingkreis mit 36kHz betrieben?CTC bedeutet, der Timer zählt von 0 bis zu dem Wert in OCR0X. Beim Erreichen von OCR0X startet er wieder bei 0 und der Interrupt wird ausgelöst. Das Zählregister TCNT0 muss dabei nicht korrigiert werden!
gruß aus Hamburg
Hallo
Der Schwingkreis wird mit 36kHz betrieben, da auch die 72kHz-Library des asuro am OC2-Pin 36kHz ausgibt. Normalerweise ist das ja die Trägerfrequenz für die IR-Kommunikation. Deshalb wird im Testprogramm aus der Anleitung der Timer beim asuro ganz normal mit Init() parametriert.
Der Zugriff auf count72kHz gibt zwar bei neueren Libs (ab v2.3) eine Fehlermeldung, aber da sie im Testprogramm nur sicherstellt, das 100 Halbwellen erzeugt wurden um den Schwingkreis anzuregen, sollte auch ein schlichtes Sleep(100) bei der 72kHz-Variante ausreichen. Bei den aktuellen Libs wäre es entsprechend Sleep(50) für 100 Halbwellen. Da wir aber beim Tiny kein Sleep() haben, zählen wir die Halbwellen selbst mit unserem count72kHz. Die erzeugte Frequenz am OC0X bleibt aber in allen Fällen 36kHz.
Gruß
mic
[Edit]
Im asurowiki wurde der Code stillschweigend an die aktuellen Libs angepasst:
http://www.asurowiki.de/pmwiki/pmwik...in/MineSweeper
Die Schaltung wird definitiv mit 36kHz betrieben. Leider hat sich aber ein Denkfehler eingeschlichen:
while (count36kHz<200)
count36kHz zählt zwei Halbwellen, die Wartezeit fürs Einschwingen beträgt deshalb in dieser Version 400 Halbwellen. Richtiger, aber vielleicht nicht wirklich besser, wäre:
while (count36kHz<50)
Geändert von radbruch (01.09.2011 um 14:17 Uhr)
![]()
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Also ganz ehrlich, der ganze Aufwand bisher hat sich eigentlich nicht gelohnt:
Aha! Deshalb auch der gigantische C2 mit 100µF zwischen Vss und GND (mit + an GND!). Da kommt von den 36kHz gar nichts mehr an!Der linke Teil der Schaltung aus Dioden und Kondensatoren dient zur Erzeugung einer (bezogen
auf die Masse der Schaltung) negativen Versorgungsspannung. Das ist erforderlich, da die
Spannung am Schwingkreis um Masse herum schwingt und damit sowohl positiv als auch negativ
werden kann.
Der Schwingkreis um die Spule/Kondensator steuert sich selbst:
(Alle Zitate aus der Anleitung.)Aber wie beim Anschubsen einer Schaukel muss das zum richtigen Zeitpunkt passieren, sonst funktioniert es
nicht. Die hier verwendete Schaltung macht das dadurch, dass sie proportional zur Spannung am Kondensator Strom in den Kondensator schiebt.
Trotzdem was gelernt.
[Edit]
Einen ähnlichen "Trick" gibts auch beim SnakeVision. Dort wird aus den 36kHz per Ladungspumpe die Eingangsspannung für einen 5V-Spannungsregler (IC2, 78L05Z) erzeugt:
http://www.produktinfo.conrad.com/da...uer_ARX_03.pdf
Geändert von radbruch (01.09.2011 um 15:43 Uhr)
![]()
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Lesezeichen