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

Reaktivlicht mit 7-Segmentanzeige

kirby27b

Geocacher
Hi,
da man bei dem Sauwetter ja nicht so wirklich cachen kann habe ich die Zeit mal genutzt um ein neues Reaktivlicht zu basteln. Basierend auf Windi´s Tiny13 Modell habe ich eines mit einem Tiny24/10 gebaut. Anstelle der Morsesymbole werden hier über eine 7-Segmentanzeige die Zahlen im Klartext ausgegeben.

Überlege noch ob ich mir ne Platine machen lasse oder das ganze " Lochrastere " Mit der Fertigplatine sollte das ganze sogar mit einer Lithiumzelle in einen kleinen Pettling passen. Der Probeaufbau auf dem Steckbrett braucht im Standby 140µA und wenns Blinkt maximal 15mA.

Grüße Olaf
 
OP
K

kirby27b

Geocacher
Hier noch das Programm dazu:

$hwstack = 20 'hardwarestack herabsetzen damit genügend variablen zur verfügung stehen
$regfile = "ATtiny24.DAT"
$crystal = 128000 'Frequenz des internen Oszillators




Config Adc = Single , Prescaler = Auto
Config Portb = &B00000111 'Pinb.0-3 auf 'Ausgang', Rest auf 'Eingang' schalten
Config Porta = &B10001011 'Pinq.1+3+5+7 auf 'Ausgang', Rest auf 'Eingang' schalten
Portb = 0 'Ausgänge auf Low setzen
Stop Ac 'Analog-Komparator abschalten, um Strom zu sparen

Wdtcr = &B11010011 'Watchdog definieren: 0.125 Sekunden, Interrupt auslösen, kein Reset
Enable Interrupts 'Interrupts freigeben

Const Schwelle = 50 'je größer der Schwellwert, desto unempfindlicher
Const Tagschwelle = 800 'Schwellwert für Schlafmodus
Const Zwangsimpuls = 8 'LED-Impuls tagsüber alle X Schlafyklen (á ca. 8 Sekunden)

Dim A As Byte 'Variablen definieren
Dim Tagzaehler As Byte
Dim Schlafzaehler As Byte
Dim Ldr As Integer '0 = Dunkel, 1023 = Hell
Dim Alt As Integer
Dim Merker As Integer
Dim Zeichen As String * 1

Do
Reset Watchdog
Powerdown 'prozessor bremsen da sonst lichtänderung nicht erkannt wird
Start Adc 'A/D-Wandler starten
Ldr = Getadc(2) 'Helligkeitswert einlesen
Stop Adc 'A/D-Wandler zum Stromsparen wieder stoppen
Merker = Ldr - Alt 'Unterschied zwischen letzter und aktueller Messung ermitteln
Alt = Ldr 'letzten LDR-Wert sichern
If Merker > Schwelle Then Gosub Morsen 'Bei großer Änderung Dunkel->Hell: Blinken
If Ldr > Tagschwelle Then 'prüfen ob helligkeit über tagschwelle liegt
If Tagzaehler < 255 Then 'int-variable geht nur bis 255
Tagzaehler = Tagzaehler + 1
End If
Else
Tagzaehler = 0 'wenn wieder dunkel tagzähler löschen
End If

If Tagzaehler > 200 Then Gosub Pause 'wenn mehr als x zyklen hell dann schlafmodus

Loop


Pause:
Wdtcr = &B11110001 'Watchdog auf 8 Sekunden stellen
Reset Watchdog
Powerdown
Wdtcr = &B11010011 'Watchdog wieder auf 0,125 Sekunden zurückstellen
Schlafzaehler = Schlafzaehler + 1 'merken wie oft Schlafmodus durchlaufen wurde
If Schlafzaehler = Zwangsimpuls Then 'als Funktionskontrolle tagsüber LED auslösen
Porta.1 = 1
Reset Watchdog
Powerdown
Porta.1 = 0
Schlafzaehler = 0
End If
Return

Morsen:
Restore Daten 'Am Beginn der Daten anfangen
Alt = 1023 'Doppelauslösung verhindern
Do
Read Zeichen
Wdtcr = &B11010111 'Watchdog auf 2s stellen
If Zeichen = "0" Then Gosub P0
If Zeichen = "1" Then Gosub P1
If Zeichen = "2" Then Gosub P2
If Zeichen = "3" Then Gosub P3
If Zeichen = "4" Then Gosub P4
If Zeichen = "5" Then Gosub P5
If Zeichen = "6" Then Gosub P6
If Zeichen = "7" Then Gosub P7
If Zeichen = "8" Then Gosub P8
If Zeichen = "9" Then Gosub P9
If Zeichen = "n" Then Gosub Pn
If Zeichen = "e" Then Gosub Pe
Wdtcr = &B11010011 'Watchdog wieder auf 125ms stellen
If Zeichen = "X" Then Return
Loop


P0:
Portb = &B00000111
Porta = &B10000011
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

P1:
Portb = &B00000110
Reset Watchdog
Powerdown
Portb = 0
Return

P2:
Portb = &B00000011
Porta = &B10001010
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

P3:
Portb = &B00000111
Porta = &B00001010
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

P4:
Portb = &B00000110
Porta = &B00001001
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

P5:
Portb = &B00000101
Porta = &B00001011
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

P6:
Portb = &B00000100
Porta = &B10001011
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

P7:
Portb = &B00000111
Reset Watchdog
Powerdown
Portb = 0
Return

P8:
Portb = &B00000111
Porta = &B10001011
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

P9:
Portb = &B00000111
Porta = &B00001001
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

Pn:
Portb = &B00000100
Porta = &B10001000
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

Pe:
Portb = &B00000001
Porta = &B10001011
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return


Leer:
Reset Watchdog
Powerdown
Reset Watchdog
Powerdown
Return

End

Daten:
Data "n" , "1" , "2" , "3" , "4" , "5"
Data "e" , "6" , "7" , "8" , "9" , "0"
Data "X"
 

thomas_st

Geowizard
kirby27b schrieb:
da man bei dem Sauwetter ja nicht so wirklich cachen kann habe ich die Zeit mal genutzt um ein neues Reaktivlicht zu basteln.
So schlecht war das Wetter doch gar nicht ;)
kirby27b schrieb:
Der Probeaufbau auf dem Steckbrett braucht im Standby 140µA [...]
Das ist recht viel! Ok ich habe jetzt das Datenblatt des Tiny 24 nicht hier - aber 140µA sind ja schon deutlich mehr, als die ca. 6µA, die der Tiny 13 (allerdings V) braucht. Mit welcher Spannung betreibst Du das Ganze?

Ansonsten: schön noch jemanden gefunden zu haben, der hier Target nutzt ;)

Viele Grüße,
Thomas(_st) - der momentan daran verzweifelt, die RFM12 Module per IRQ-Modus mit einem Tiny 44 zu verheiraten ;)
 
OP
K

kirby27b

Geocacher
Hi,

so das erste ist fertig. Als ich es dann Programieren wollte ist mir aufgefallen das ich beim Schaltplan/Platine erstellen durch das wechseln und neu belegen der ISP-Steckleiste deren Belegung verwurstelt habe. Also mußte ich mir noch einen Adapter basteln. Doch es geht so prima. So schauts aus:

Ist allerdings doch ein großer Pettling geworde, da die Anzeige höher war als ich dachte, aber so ist genug Platz für die Batterie ( 3,6V Lithium )
- aber 140µA sind ja schon deutlich mehr, als die ca. 6µA, die der Tiny 13 (allerdings V) braucht.
Komischerweise braucht die SMD Schaltung nur noch ca.14µA Ruhestrom. Habe es mehrfach getestet, der DIL Tiny auf dem Steckbrett braucht 140µA und die Platine mit den SMD Bauteilen 6µA im Tagmodus und ca.13µA im Nachtmodus ( wohl wegen der häufigeren Abfrage des LDR ) Beides von der selben 3,6V Zelle gespeist. Naja aber besser so als anders herum.

Grüße Olaf
 

thomas_st

Geowizard
kirby27b schrieb:
- aber 140µA sind ja schon deutlich mehr, als die ca. 6µA, die der Tiny 13 (allerdings V) braucht.
Komischerweise braucht die SMD Schaltung nur noch ca.14µA Ruhestrom. Habe es mehrfach getestet, der DIL Tiny auf dem Steckbrett braucht 140µA und die Platine mit den SMD Bauteilen 6µA im Tagmodus und ca.13µA im Nachtmodus ( wohl wegen der häufigeren Abfrage des LDR )
Komisch. Wie hast Du gemessen? Das einzige was mir noch einfallen würde, wäre, dass das Messgerät eventuell einen Spitzenstrom angezeigt hat. Ansonsten 6µA und 13µA sind sehr ok. :) Was mir gerade noch einfällt: eventuell einen anderen Widerstand für R1 genommen?

Viele Grüße,
Thomas(_st) - sieht gut aus :)
 

upigors

Geowizard
kirby27b schrieb:
Hi,
da man bei dem Sauwetter ja nicht so wirklich cachen kann habe ich die Zeit mal genutzt um ein neues Reaktivlicht zu basteln. .....

Ich hab grad etwas Zeit und versuche mal Dein Programm zu verstehen.
du leuchtest den LDR an und dieser gibt Zahlen aus. Mehrere hintereinander?
und wo definierst du die eingaben zu den ausgaben p0 - pe?
ich find das in dem programm nicht?
sorry, bin nur laihe was das angeht und versuche zu verstehen ;-
gruß uwe
 

#ammensleben

Geocacher
die einzelnen Zahlen werden in den unter den Subs von p0 bis pe definiert weil der tiny ja sons tnicht wuesste wann welche der leds zu leuchten hat. die Daten der eigentlichen Ausgabe sind in der Sub Daten definiert wie ganz unten zu sehen ist.
 

upigors

Geowizard
ja, hab nur bis "END" gelesen und dabei das
Daten:
Data "n" , "1" , "2" , "3" , "4" , "5"
Data "e" , "6" , "7" , "8" , "9" , "0"
Data "X"
übersehen
trotzdem danke
 

ksbender

Geocacher
Eine kleine Frage an kirby27b:
Wie hast du deinen Programmieradapter umgestrickt?
Einfach analog Kochbuch und auch wieder PB0, PB1 und PB2 neben GND und Reset?
Wenn nein, dann schreib doch bitte deine Anschlüsse für die Laien im Forum (also auch mich) einmal auf.
Ansonsten kann ich nur sagen: Toll realisierte TOLLE IDEE.
Heute sind bei mir ein paar Attiny 24er eingetroffen und ich freue mich schon auf´s Wochenende.
Gruß
Stephan
 
OP
K

kirby27b

Geocacher
Hi,

also ich habe nicht den Programieradapter aus dem Kochbuch, da mein LPT-Port nicht mit delbigem funktioniert. Ich benutze den 6 Poligen ISP-Anschluß des STK500. Die Anschlüsse für den Programieranschluß des Tiny24 sind ( für DIP und SOIC Gehäuse):

Reset= Pin 4 ( Pb3)
Mosi = Pin 7 ( Pa6)
Miso = Pin 8 ( Pa5)
SCK = Pin 9 ( Pa4)
VCC = Pin 1
GND = Pin 14

Und bitte darauf achten das ich durch Unachtsamkeit die Pins des Programieranschluß im Schaltplan nicht passend zu der Originalbelegung des Atmel ISP-Anschluß belegt habe. Aber wer sich eine Platine machen lassen will kann selbiges ja in seinem Layout verbessern.

Grüße Olaf
 

upigors

Geowizard
hab auch noch ne Frage... was ist der/das "K" (K2X03) da oben rechts in der Ecke? Teilesuche bei Reichelt und Google brachte keine Resultate....
Ansonsten muß ich sagen, geniale Idee, mal was anderes....

Gruß Uwe
 

thomas_st

Geowizard
upigors schrieb:
aja, also nix elektronisches sondern den Adapter den er irgendwo erwähnt hatte?
Da wir die Frage gerade hatten: das ist der Anschluss für den Programmieradapter. Im STK500 ist genau so ein 2x3 Pfostenstecker als ISP-Ausgang vorhanden. So braucht man nur ein entsprechendes 6 poliges Flachbandkabel zwischen STK500 und Schaltung stecken und kann programmieren.

Viele Grüße,
Thomas(_st)
 

upigors

Geowizard
ok, verstanden. da ich den stk500 aber nicht hab und mir 69 euro nur zum spielen zu teuer ist, kann mir bestimmt auch einer erklären wie ich den eprom mit meinem programmierkabel vom attiny 13 durch anlöten der adern an den füssen des eproms programmieren kann, oder? hab ich bisher immer so gemacht aber wie gesagt, nur beim 13
gruß und danke erstmal
 

#ammensleben

Geocacher
wie ich dir schon gestern sagte: einfach drauf achten das du die pins so uebertraest von tiny13 auf den großen. also Reset, Mosi, Miso und den letzten der 4 den ich grad nich weiß. einfach im bascom mal beide chips eintragen und gucken welcher pin welcher belegung entspricht.
 

upigors

Geowizard
ja sagtest du... werd mir mal ne grafik basteln, wenn ich da was verdrehe machts " qualm" :schockiert:
gruß uwe
 
OP
K

kirby27b

Geocacher
Hi,
habe mal eben eine Vergleichsliste der Pin's vom Tiny13 + 24 gemacht. Hatte selber Probleme bis ich Begriffen hatte das "USCK" am 24'er das gleiche Bedeutet wie "SCK" am 13'er. Also Übersetzung der Tiny13 Pin's auf den Tiny24 damit es keine bösen Überaschungen gibt, wobei ich selbst bei Verpolungen keine bemerkt habe was aber durchaus auch an Schutzbeschaltungen des STK500 liegen könnte. Also lieber dreimal hinsehen als einen Atmel ins Datennirvana befördern.


Pin-Tiny13 wird Pin-Tiny24

8-VCC-----------------1-VCC
4-GND----------------14-GND
7-SCK------------------9-SCK( im Pinlayout mit USCK Beschrieben)
6-MISO----------------8-MISO
5-MOSI----------------7-MOSI
1-RESET--------------4-RESET

So und werd ich mal mit nem Kaffee über der Verbedienigungsanleitung meiner neuen Drehbank brüten.

Grüße Olaf
 

upigors

Geowizard
Jetzt hab ich doch noch ne Frage... (sorry falls dir die komisch erscheint aber ich hab noch nie mit soner 7-segmentanzeige gearbeitet, würde das aber gern verstehen)
die 7 balken werden doch bei gemeinsamer masse einzeln angesteuert.
diese anschlüsse hast du auf die einzelnen ports des attiny gelegt. wenn ich jetzt mal angenommen die 3 haben will benötige ich doch a, b, c, d und g.
in deinem Programm definierst du nur 2 ports. ich meine das wird funktionieren, davon bin ich überzeugt, aber WIE?
ich meine wo erfährt der tiny welchen PA bzw PB er aufmachen soll? wenns nur einen betrifft wie beim reaktiven blinker dann ist das logisch.
sorry kann das jetzt nicht besser erklären, vielleicht verstehst du das auch so?
gruß uwe
 
Oben