• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Reaktives Licht mit Atmel AVR

KaJu

Geocacher
Sir Vivor schrieb:
Ähm, genau das tu'n wir ja jetzt schon. Nur messen wir nicht deren Kapazität als solche, sondern schauen lediglich nach einer festen Zeit nach, ob die Kapazität noch ge- oder schon entladen ist. Bisher habe ich mich bewußt für dieses Verfahren entschieden, da eine absolute oder relative Kapazitätsmessung programmtechnisch wesentlich aufwendiger zu realisieren wäre.

Wäre das wirklich so aufwendig? Ich stecke nicht wirklich in der AVR-Programmierung drin, aber kann man nicht Pinb.4 auf einen Interrupt legen und dann schlicht die Zeit messen, bis dieser wieder auf 0 liegt? Je länger es dauert, desto langsamer die Entladung.

Sicher muß man das für jeden LED-Typ neu "eichen", aber das muß man jetzt auch, wer sagt denn, daß die 1500ms für jeden LED-Typ passen?

Wenn das mit dem Interrupt nicht geht: Wie wäre es alternativ mit einer Schleife, die darauf wartet, bis Pinb.4 auf 0 geht? Ein Interrupt wäre allerdings die elegantere Lösung.

Gruß, Kai aka KaJu
 
OP
S

Sir Vivor

Geocacher
radioscout schrieb:
Ich dachte auch eher an die Anwendung der LED als Varicap in einem LC-Oszillator.
Hätte was! Ein lichtgesteuerter VFO. Damit könnte man z.B. die preiswerten 1-Quarz-TRX's Marke 'Tiny Tornado' & Co etwas aufpeppen. ;-)

KaJu schrieb:
Wäre das wirklich so aufwendig?
Ich denke schon. Jede Programmierung wird aufwändiger, wenn IRQ's mit in's Spiel kommen, da das bzw. deren Timing dann im gesamten Programm genaustens beachtet werden muß. Aber mal schauen...

Viele Grüße,

Sir Vivor
 

Windi

Geoguru
So, meine Teile sind heute gekommen.
Jetzt brauch ich nur noch das Howto für den Bascom und die Sache mit den Fuses.
 
OP
S

Sir Vivor

Geocacher
Das kleine 'Bascom-AVR-How-To' folgt leider erst morgen...

Kurz vor Fertigstellung habe ich leider das falsche Browserfenster geschlossen...! :oops: :evil: :x

Jetzt muß ich mich erstmal abregen.

Es grüßt ein über-seine-eigene-Blödheit-stinksaurer...

...Sir Vivor
 

Windi

Geoguru
Schade,

ich habs leider ohne Hilfe nicht hinbekommen das Teil zu programmieren.
Ich habe alle möglichen Programmer eingestellt. Er erkennt den Chip nicht.

Hab schon Angst gehabt dass ich meine parallele Schnittstelle gekillt hätte aber sie tut es glücklicherweise noch.

Dann muss ich halt bis morgen warten. :cry:
 
OP
S

Sir Vivor

Geocacher
Moin,

so, zweiter Versuch (sorry Windi!)...

Hier also nun das angekündigte kleine 'Bascom-AVR-How-To':

Diese Anleitung beschreibt, wie man in Bascom den von mir verwendeten 'Low-Cost-Programmieradapter' (SP12-kompatibel) einstellt und die 'Fuses', auch 'Fuse-Bits' genannt, des Tiny13(V) für unser Programm bzw. unsere Schaltung setzt. Bascom sollte bereits installiert und die Schaltung mit dem Tiny13(V) angeschlossen sein.

Als erstes wird Bascom gestartet. Nun stellen wir den Programmieradapter ein. Dazu wählt Ihr zunächst im Hauptmenü unter 'Options' den Punkt 'Programmer' aus:

bild054az.gif


Im folgenden Fenster wählt Ihr oben bei 'Programmer' das 'Universal MCS Interface' aus und klickt unten auf den Karteireiter 'Universal'. Hier wählt Ihr dann als Programmer den 'WinAVR and SP12' aus:

bild065gt.gif


Danach einfach auf 'Ok' klicken, fertig!

Als nächstes stellen wir die Fuse-Bits ein. Die Fuse-Bits sind Speicherzellen, die das (Grund-)Verhalten des Tiny's festlegen (wir wollen ihn ja z.B. mit dem internen 128 kHz-Oszillator laufen lassen). Dazu klickt Ihr zunächst oben unter dem Hauptmenü auf den kleinen, grünen IC-Sockel und wählt den Punkt 'Manual Program' aus:

bild090ho.gif


Im nun folgenden Fenster klickt Ihr auf den Karteireiter 'Lock and Fuse Bits'. Jetzt sollte Bascom die Fuse-Bits aus dem Tiny auslesen und anzeigen:

bild107ps.gif


Um Veränderungen an den Fuse-Bits vorzunehmen, klickt Ihr einfach auf die entsprechende Zeile, in der sich das gewünschte bzw. zu ändernde Bit befindet. Ihr könnt dann in dem sich öffnenden Auswahlmenü auswählen, welche Werte Ihr haben bzw. einstellen wollt. Wir stellen nun zwei Sachen ein: 'Interner 128 kHz-Oszillatorbetrieb' und 'Taktverhältnis beim Starten 1:1'. Dazu klickt Ihr zunächst auf das 'Fusebit DCBA' und stellt es auf '1011:Int. RC Osc. 128 kHz; Start-up time: 14 CK + 64 ms'. Dann klickt Ihr auf das 'Fusebit E' und stellt dort '1:Divide clock by 8, OFF' ein:

bild120yj.gif


Bitte kontrolliert diese Einstellungen jetzt alle nochmal sehr genau! Wenn Ihr an dieser Stelle nämlich einen Fehler macht, kann es sein, daß der Tiny nach dem nächsten Klick unwiderruflich 'hin' ist! Ist alles so weit richtig, dann klickt jetzt rechts auf 'Write FS'. Bascom schreibt nun die aktuellen, geänderten Fuse-Bit-Einstellungen in den Tiny:

bild142ct.gif


So, fertig. Jetzt geht's an's eigentliche Programmieren. Ob Ihr nun erst mein Programm testen oder schon Euer erstes Programm selbst schreiben wollt, ist dabei egal. Als erstes wählt Ihr oben im Hauptmenü unter 'File' den Punkt 'New' aus:

bild015vo.gif


Es öffnet sich ein Fenster, in das Ihr nun entweder meinen Programmcode kopieren könnt oder Ihr fangt gleich mit Eurem ersten eigenen Programm an:

bild020na.gif


Wenn das alles soweit fertig ist, muß das Programm zunächst kompiliert werden. Dazu klickt Ihr im Hauptmenü unter 'Program' einfach auf 'Compile'. Der Compiler startet nun und sollte im Idealfall, zumindest bei meinem Programm, nicht meckern:

bild036sa.gif


Ist das auch erledigt, startet Ihr jetzt die Programmübertragung zum Tiny. Dazu klickt Ihr, wieder im Hauptmenü unter 'Program', auf den Punkt 'Send to chip'. Das zuvor kompilierte Programm wird nun in den Speicher unseres Tiny geladen:

bild048fh.gif


Nun kommt der spannende Moment! Wenn Ihr meinen Programmcode ausprobiert habt, nehmt einfach eine Lichtquelle und strahlt damit die LED kurz an. Sie sollte dies sofort mit einer Blitzfolge (zehn kurze Impulse) quittieren. Läuft's? Ja? Prima, gut gemacht! Nein? Doch nicht? Dann solltet Ihr alles noch einmal gründlichst überprüfen. Falls Ihr keinen Fehler entdecken könnt, dann beschreibt Euer Problem hier in diesem Thread. Gemeinsam bekommen wir das schon hin! ;-)

So, das soll's erstmal gewesen sein an dieser Stelle; ich bin mal auf Eure Ergebnisse gespannt!

Viele Grüße,

Sir Vivor
 

zerogravity

Geocacher
Hallo Windi!

Ich möchte mal einen Hinweis geben bezüglich der Parallel-Schnittstelle.
Vor längerer Zeit wollte ich die Schnittstelle auch mal für Input und Output benutzen und es funktionierte nur Output. Ich hatte im Bios des PC die Schnittstelle nicht richtig konfiguriert. Es gibt dort die Möglichkeit ECP oder EPP zu wählen. Ich weiß nicht mehr genau welche Einstellungen ich dort gemacht hatte.
Vielleicht hilft dieser Gedankenanstoß etwas weiter.
:)
Gruß zero
 
OP
S

Sir Vivor

Geocacher
zerogravity schrieb:
Ich hatte im Bios des PC die Schnittstelle nicht richtig konfiguriert. Es gibt dort die Möglichkeit ECP oder EPP zu wählen.

Sehr guter Hinweis! :idea:

Die (parallele) Druckerschnittstelle LPT1 muß, falls noch nicht geschehen, auf ECP+EPP gestellt werden (Portadresse $378)!

EDIT:

Hier mal meine BIOS-Einstellungen:

Onboard Parallel Port : 378/IRQ7
Parallel Port Mode : ECP+EPP
ECP Mode Use DMA : 3
Parallel Port EPP Type : EPP1.7

Viele Grüße,

Sir Vivor
 

Windi

Geoguru
Sir Vivor schrieb:
Und, woran lag's?
Ich konnte Dich ja gestern leider nicht erreichen und so habe ich es halt auf eigene Faust probiert. Ich hatte zwar den richtigen Programmer ausgewählt (das Universal MCS Interface war das einzige wo sich bei mir was am LPT1 tat) aber nicht gewusst dass ich bei "Universal" noch was einstellen muss.

Nach dem Programmieren der Fueses gab es allerdings eine kleine Schrecksekunde. Das Ding hat irgendwie rumgezickt und den Tiny nicht mehr identifizieren können. Jetzt klappt es aber wunderbar. Das könnte eine lange Nacht werden. :wink:
 

Mika Mifizu

Geocacher
Sir Vivor schrieb:
Mika Mifizu schrieb:
Vielleicht hilft es, eine zweite LED in der gleichen Art und Weise, aber senkrecht dazu, einzubauen und ebenfalls abzufragen.
Die Idee ist gut, nur möchte ich das gern mit einer LED hinbekommen. In allen analogen Schaltungen nimmt man ja auch nur einen LDR.
Hallo Sir,

stimmt so nicht ganz: analoge Schaltungen haben noch ein RC-Glied drin, das die Geschwindigkeit der Helligkeitsänderung bestimmt. Damit hast Du über diese Ableitung eine Information, ob es eine langsame Änderung (Dämmerung) oder eine vorbeistreichende Taschenlampe (Nachtcache) war.

Servus
Mika
 

Windi

Geoguru
Mika Mifizu schrieb:
analoge Schaltungen haben noch ein RC-Glied drin, das die Geschwindigkeit der Helligkeitsänderung bestimmt. Damit hast Du über diese Ableitung eine Information, ob es eine langsame Änderung (Dämmerung) oder eine vorbeistreichende Taschenlampe (Nachtcache) war.
Kann man alles sotwaremäßig machen.
Ich hatte heute keine Lust zu arbeiten und deshalb bin ich gerade dabei so etwas zu programmieren.
 

Windi

Geoguru
So, geschafft. Der softwaremäßige Tag-Filter funzt einwandfrei. Hier der entsprechende Programmausschnitt:
Code:
Do

Gosub Led_abfrage

If Hell_dunkel = 0 Then Hell = 1                            'Wenn Licht erkannt wurde Merker setzen'
If Hell = 1 And B < 10000 Then B = B + 1                    'Wenn Licht erkannt wurde zu zählen beginnen. B dabei begrenzen'
If Hell = 1 And Hell_dunkel = 1 And B < 1000 Then Gosub Blinken       'Wenn der Lichtimpuls nur kurz war dann Blinken'
If Hell_dunkel = 1 Then                                     'Wenn wieder Dunkel Merker und Zähler löschen'
  Hell = 0
  B = 0
End If

Loop

[Edith]
Je nachdem welche Auswertezeit man für die LED eingestellt hat muss man "B < xxx" variieren. Ich habe die LED sehr emfindlich eingestellt mit einer Auswertezeit von 100 ms. Bei mir ergibt sich dann mit "B<30" eine Filterzeit von ca. 3 Sekunden. Nur wenn die LED kürzer beleuchtet wird blinkt sie zurück. Bei Tag oder wenn jemand das Ding länger als 3 Sekunden anstrahlt bleibt es dunkel.
 

Windi

Geoguru
Ich hab gerade noch etwas unangenehmes festgestellt.
Wenn ich den Tiny vom Strom nehme und ihn später wieder anstecke läuft das Programm nicht automatisch an.
Das gute Stück braucht erst ein paar Schläge auf den Hinterkopf (bzw. einen Reset).
Dann wird man wohl doch noch einen Kondensator und einen Widerstand brauchen für einen Auto-Reset. Oder hat jemand eine bessere Idee?
 
Oben