• 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

#ammensleben

Geocacher
moin moin

durch folgende Definition
P3:
Portb = &B00000111
Porta = &B00001010
wird der Port ueber eine Binäre Variable angesprochen.
Du koenntest auch jede Leitung eines Ports einzeln ansteuern. Macht aber nicht wirklich Sinn.
so in etwa
P3:
Portb.0=1
Portb.1=1
Portb.2=1
Portb.3=0
Portb.4=0
Portb.5=0
Portb.6=0
Portb.7=0
Porta.0=0
Porta.1=1
Porta.2=0
Porta.3=1
Porta.4=0
Porta.5=0
Porta.6=0
Porta.7=0
hoffe das war verständlich
 
OP
K

kirby27b

Geocacher
Hi,

wie schon oben ausgeführt habe ich die Möglichkeit entweder jeden Ausgang einzeln anzusprechen, oder einen gesammten Port z.b. Pb0-7 . Das läßt sich eben in einer Anweisung machen wobei die Portadressen von rechts nach links bei Null beginnend gezählt werden. Bei der Anzahl der möglichen I/O's hängt es natürlich davon ab wie viele der jeweilige Atmel hat. Beim 24'er sind es PA0-7 und PB0-3 also en voller Port mit 8 I/O und ein Halber Port mit 4 I/O. Wenn man also schreibt: Portb = &B00000111 werden die Port's
PB0 , PB1, PB2 gesetzt.

Meine Belegung der Ports ist Pb0=a, Pb1=b, Pb2=c, Pa1=d, Pa7=e, Pa0=f, Pa3=g

Es fällt bestimmt auf das ich nicht alle Ports der Reihe nach benutzt habe. Der Grund ist das bei Belegung der Ports die zur Programierung dienen bei mir Probleme Auftraten. Will sagen das ich bei dort angeschlossenen LED nicht mehr programieren konnte, also habe ich eben diese nicht benutzt da der Tiny24 genug andere zur Verfügung stellt.

Grüße Olaf
 

jekejaerfi

Geocacher
Hallo Olaf,

ich habe mir mal dein Programm angesehen und die Schaltung. Du hast an PA0 "g" angebunden. Das sollte man beim Nachbauen beachten, bzw. korrigieren.

Ich habe vorhin mal versucht, dein Programm im bascom "auszuprobieren". Leider meckert bascom immer über den watchdog-befehl (wdtcr = &B11010011). Auch musste ich den Befehl zum Herabsetzen des Hardswarestacks nach $crystal = 128000 verschieben.

Da ich leider weder in der Elektronik noch in der Hardwareprogrammierung firm bin, komme ich hier nicht weiter.
Hinzu kommt, dass bascom ständig Fehlermeldungen beim Auslesen der ATTinys auswirft und auch nach Ändern der Lock and Fuse Bits immer wieder unterschiedliche Werte auswirft.
Welche Werte müssen für die bits gesetzt werden?
Lockbit 21 habe ich diverse male auf "no memory lock features enabled" gesetzt, aber es wird irgendwie nicht übernommen oder falsch eingelesen!?
Fusebit high 7: dort gibt es nur zwei Möglichkeiten:
entweder "allways on" oder "controlled by software"
was ist mit BOD?
Ach ja, erstmal vielen Dank für die bisherige Hilfe und die Infos.

gruß

Jenslockundfusebits1.jpg
 
OP
K

kirby27b

Geocacher
Hi,

also iich habe es mal überprüft, es ist PA0=f und PA3=g was aber daran liegt das die Anzeige die ich bekommen habe eine etwas andere Typenbezeichnung ( die Lautet SC56-11EWA ) hat dort sind f+g vertauscht, Sorry hätte ich erwähnen sollen, aber wie es schonmal so geht ändert man soetwas und vergisst es. Wie die Simulation in Bascom fünktioniert weis ich nicht. Ich habe die Schaltung auf einem Steckbrett aufgebaut und dann dort getestet. Tja die Fusebits, die setze ich über AVR-Studio, da
Bascom mir das am STK500 nicht erlaubt, wiso auch immer. Was mit aber zwischendurch mal aufgefallen ist das ich Probleme Habe den Tiny zu flaschen wenn ich die Frequens auf 128kHz stelle. Also Programiere ich den Maikäfer zuerst und stelle dann die Interne Frequenz auf 128kHz.



Ansonsten ist das Programm so wie ich es verwende.

Grüße Olaf
 
OP
K

kirby27b

Geocacher
Hi,

so hier ist mein Programm in der letzten Version. Habe noch ein links/rechts herum gehendes Lauflicht eingemaut und die Anzeige nord / OSt. So ist der Speicher zu 82% belegt, ist also och Platz für weitere Ideen.

$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 'Pina.0+1+3+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 'schreibt 0 ins Display
If Zeichen = "1" Then Gosub P1 'schreibt 1 ins Display
If Zeichen = "2" Then Gosub P2 'schreibt 2 ins Display
If Zeichen = "3" Then Gosub P3 'schreibt 3 ins Display
If Zeichen = "4" Then Gosub P4 'schreibt 4 ins Display
If Zeichen = "5" Then Gosub P5 'schreibt 5 ins Display
If Zeichen = "6" Then Gosub P6 'schreibt 6 ins Display
If Zeichen = "7" Then Gosub P7 'schreibt 7 ins Display
If Zeichen = "8" Then Gosub P8 'schreibt 8 ins Display
If Zeichen = "9" Then Gosub P9 'schreibt 9 ins Display
If Zeichen = "n" Then Gosub Pn 'schreibt n ins Display
If Zeichen = "e" Then Gosub Pe 'schreibt E ins Display
If Zeichen = "re" Then Gosub Rechts 'Lauflicht rechts herum
If Zeichen = "li" Then Gosub Links 'Lauflicht links herum
If Zeichen = " " Then Gosub Leer 'leerzeichen-keine Anzeige
If Zeichen = "ost" Then Gosub East 'schreibt OSt ins Display
If Zeichen = "nord" Then Gosub North 'schreibt nord ins Display
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 = &B00000101
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

Rechts:
Wdtcr = &B11010100
Portb = &B00000001
Reset Watchdog
Powerdown
Portb = 0
Portb = &B00000010
Reset Watchdog
Powerdown
Portb = 0
Portb = &B00000100
Reset Watchdog
Powerdown
Portb = 0
Porta = &B00000010
Reset Watchdog
Powerdown
Porta = 0
Porta = &B10000000
Reset Watchdog
Powerdown
Porta = 0
Porta = &B00000001
Reset Watchdog
Powerdown
Porta = 0
Portb = &B00000001
Reset Watchdog
Powerdown
Portb = 0
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

Links:
Wdtcr = &B11010100
Portb = &B00000001
Reset Watchdog
Powerdown
Portb = 0
Porta = &B00000001
Reset Watchdog
Powerdown
Porta = 0
Porta = &B10000000
Reset Watchdog
Powerdown
Porta = 0
Porta = &B00000010
Reset Watchdog
Powerdown
Porta = 0
Portb = &B00000100
Reset Watchdog
Powerdown
Portb = 0
Portb = &B00000010
Reset Watchdog
Powerdown
Portb = 0
Portb = &B00000001
Reset Watchdog
Powerdown
Portb = 0
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

East:
Wdtcr = &B11010101
Portb = &B00000111
Porta = &B10000011
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Portb = &B00000101
Porta = &B00001011
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Porta = &B10001011
Reset Watchdog
Powerdown
Porta = 0
Return

North:
Wdtcr = &B11010101
Portb = &B00000100
Porta = &B10001000
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Portb = &B00000100
Porta = &B10001010
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Porta = &B10001000
Reset Watchdog
Powerdown
Porta = 0
Portb = &B00000110
Porta = &B10001010
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

Leer:
Reset Watchdog
Powerdown

Return

End

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

ksbender

Geocacher
Ich glaube, wir sind auf dem besten Weg hier auch ein Kochbuch zu erstellen. Macht ja auch Spaß.
Leider habe ich es bis jetzt noch nicht hinbekommen. Gestern ist mir ein 24er abgeraucht. Da muß ich mal sehen, wie es mit einem Hochvolt-Reset aussieht.
Olaf, wie oben schon geschrieben komme auch ich nicht mit K1 / K2X03 zurecht. Gibt es einen Schaltplan? Batterie/Akku mit Plus und Minus sind doch leichter zu verstehen.
Gruß
Stephan

PS: Das mit dem Lauflicht ist auch wieder toll.
 

jekejaerfi

Geocacher
Hallo Olaf,

ich habe bascom noch einmal auf zwei anderen Rechnern installiert.
Die Fehlermeldung beim Überprüfen des Programms bleiben. Ich kann somit weder Compilieren, noch Simulieren.
fehlermeldung1.jpg
Warum stört sich bascom über den Befehl? Wenn ich einen anderen Tiny wähle (z.B.Tiny13) dann taucht dieser Fehler nicht mehr auf (wenn auch dafür andere, die chipspezifisch auftauchen müssen ;))
Aber wenigstens kann ich nun wohl ohne weitere Merkwürdigkeiten die Tiny ansprechen. Scheinbar ist wohl am besten, wenn man einen alten Rechner verwendet.

@ksbender:
Ja ich denke auch, dass ein schönes ausführliches Kochbuch erforderlich ist. Die bereits vorliegenden sind imho recht gut geglückt.

Nochmals vielen Dank!
 

hendyp

Geocacher
Hallo jekejaerfi,
jekejaerfi schrieb:
Warum stört sich bascom über den Befehl? Wenn ich einen anderen Tiny wähle (z.B.Tiny13) dann taucht dieser Fehler nicht mehr auf (wenn auch dafür andere, die chipspezifisch auftauchen müssen ;))
Der Tiny24 hat kein WDTCR (Watchdog Timer Control Register) sondern ein WDTCSR (Watchdog Timer Control and Status Register). Soweit ich auf Anhieb sehen konnte, unterscheiden sie sich etwas in der Funktion des WDE-Bits (Watchdog Enable), allerdings verstehe ich noch nicht ganz, was mit den "safety levels" gemeint ist bzw. wie diese funktionieren.

Ich würde Dir vorschlagen, für einen ersten Versuch WDTCR im Programmtext durch WDTCSR zu ersetzen. Dann sollte zumindest der Compilerfehler behoben sein.

Gruß,
hendyp
 

jekejaerfi

Geocacher
Hallo hendyp,

das hatte ich gestern auch schon gelesen und ausprobiert. Aber nun kommt eine andere Fehlermeldung:
neuer Fehler.jpg
Aber egal wie ich die Reihenfolge oben ändere, es bleibt der Fehler 202 in Zeile 1:
.EQU not found!
Was bedeutet dies nun? Ich glaube, ich benötige schnellstens einen Schnellkurs in Programmierung und eine ausführliche Befehls- und Fehlerreferenz ;)
 

ksbender

Geocacher
Das Problem den ATtiny 24 mit Olaf´s Programm anzusprechen hatte ich auch. Zuerst habe ich die ganzen Fehlermeldungen versucht über ein ' rauszuhauen. Das führte aber nicht zum Ziel. Dann las ich in anderen Foren, daß es bei Bascom vielleicht ein Problem in der attiny24.dat gibt. Empfehlung war auf die neuere Version umzusteigen. Nur, ich habe die neuste Version auf dem Rechner installiert.
Gut, so kam ich nicht weiter und in einer *.dat wollte ich auch nicht unbedingt rumfummeln. Also habe ich mir eine ältere Version (1.11.8.7) gezogen.
Damit funktionierte bei mir das Compilieren ohne Fehlermeldung. Das sowohl für einen ATtiny 24 wie auch für einen ATtiny 44, der mit gleichen Fehlermeldungen vorher ausgestiegen war.
Beide ATtiny's konnte ich ansprechen - z.B. die Fuse Bits ändern.
Aber aufgrund felhendem "Layout" bzw. "User zu dumm error" konnte ich das Programm nicht in Hardware testen.
Gruß
Stephan / ksbender
 
OP
K

kirby27b

Geocacher
Hi,

also es liegt tatsächlich an den *.dat Files von Bascom. Mir ist das nicht aufgefallen da ich eine Vollversion benutze die mit den neueren "fehlerfreien" Dateien ausgestattet ist. Habe mir zum Test mal die aktuelle Demo auf den Laptop installiert und siehe da die selben Probleme wie die hier beschriebenen. Habe dann mal testweise das dat-File aus der neuen ins alte Bascom kopiert und siehe da es tut seinen Dienst, sprich es compiliert Fehlerfrei. Was mir nur aufgefallen ist das die jetzige Demoversion 1.11.9.1 eine Codelimit von 4Kb hat. War das früher nicht schon bei 2Kb limitiert? Es gibt auf der Seite von MCS einen Download der in der Beschreibung was von "Neuen" DAT-Files enthält. Möglicherweise ist das ja des Rätsels Lösung.
Hier auch mal eine Liste der Teile die ich verbaut habe:

Batterie:TekCell AA01-1A
Anzeige : SC56-11EWA
MCU :ATTINY24-10SSU
Stecker : Sitftleiste gewinkelt 2*36pol RM2,54 / dann einfach dort einen 2*3pol abgeschnitten
LDR :A90 60 14
C1: 100n-805
R1:4,7M-1206
R2:130R-1206

Anstelle der SMD-Bauteile kann man natürlich auch "Normale" Bauteile Verwenden. Der Hintergrund aus welchem ich den Stecker verbaut habe ist das man so die Schaltun a. Lötfrei Programieren kann und b. die Batterien Zuhause schon fertig mit Stecker liegen haben kann. So ist das Tauschen im Wald einfach nur noch alte raus und neue rein.

Die Belegung des Stecker ist wie Folgend:
Pin1=PB3 / Reset
Pin2= GND
Pin3= VCC
Pin4= PA4 / SCK
Pin5= PA5 / MISO
Pin6= PA6 / MOSI


Grüße Olaf
 

jekejaerfi

Geocacher
Hallo Olaf,

vielen Dank erstmal für deinen Hinweis. Ist schon ziemlich schade, dass das Programm diesen Fehler beinhaltet. Übrigens scheint die von dir genannte Datei (commandline-Compiler ?) das leider nicht zu korrigieren.
Wenn man nun die richtige "attiny24.dat" hätte, würde es sicher besser laufen. ;)

So ich werde dennoch mal das Ganze auf meinem alten Notebook installieren und gucken, ob ich es dort hinbekomme.

Nochmals vielen Dank für die bisherige Hilfe.

Einen schönen Sonntag

Jens
 
OP
K

kirby27b

Geocacher
Hi,

nur mal so zum Testen versucht bitte mal jemand diese Tiny24-dat obs wirklich daran liegt.

Grüße Olaf
 

Anhänge

  • ATtiny24.zip
    6,5 KB · Aufrufe: 171

jekejaerfi

Geocacher
Schnelltest ist erfolgreich!

Da ich es hier aber erstmal nur unter Virtualbox ohne angeschlossene Hardware gestestet habe, ist es wirklich nur mit Vorsicht zu betrachten.

Mehr Infos, wenn ich auch schaltungstechnisch so weit bin, dass ich hier ruhigen Gewissens auch ein "O.K." melden kann.

Olaf, erstmal vielen Dank für die Datei!

Bis dahin

Jens
 

ksbender

Geocacher
Nach der Stückliste von Olaf hier mal der Schaltplan für den Anschluß des Programmieradapters an einen ATtiny24.
Frei nach dem Kochbuch von Ralf hier die entsprechende Beschreibung:

Für den Programmieradapter wird ein 25-poliger SUB-D-Stecker benötigt (einfacher geht es mit der Hälfte eines alten Parallelkabels eines Druckers, die an den PC gesteckt wird). Pin 2 wird über einen Widerstand R2 = 220 Ohm an Pin 9 des ICs, Pin 3 an Pin 4 des ICs, Pin 9 über einen Widerstand R3 = 220 Ohm an Pin 7 des ICs, Pin 11 an Pin 8 des ICs und Pin 24 und 25 an Pin 14 des ICs (Masse) angeschlossen.


Grüße
Stephan / ksbender
 

Anhänge

  • Adapter_ATtiny24.jpg
    Adapter_ATtiny24.jpg
    115 KB · Aufrufe: 2.112

jekejaerfi

Geocacher
so kurze Erfolgsmeldung:
Tiny24 programmiert und ausprobiert: Fehlerfrei!

Vielen Dank an euch und vor allem an Olaf für die Lösung und die Unterstützung.

Mal sehen, ob wir das nun auch irgendwann mal irgendwo einbauen können.

Schöne Grüße

Jens
 
OP
K

kirby27b

Geocacher
Hi,

schön das es mit dem neueren *.dat File nun geht. Häte ja nie gedacht das die Idee mit der 7-Segmentanzeige solchen Anklang findet. Was ich nun noch andenke ist die ganzen Anzeigewerte um 180° zu drehen, wenn man das Anzeigemodul sozusagen auf dem Kopf stehend montieren will.
Möglicherweise sollte man das ganze mal zu einem PDF zusammen fassen, oder eventuell als Erweiterung dem Kochbuch hinzu fügen. Denn es ist ja genaugenommen nur eine Erweiterung des dort vorgestellten Reaktivlicht.

Grüße Olaf
 

Anhänge

  • 7-Segment-reaktiv.zip
    141 KB · Aufrufe: 325

ksbender

Geocacher
Ja, da könnte man sich noch so einiges einfallen lassen.
Wie wäre es mit Spiegelschrift? ;)
Oder gar mit doppelter Spiegelschrift? :D
Oder ein kleiner Rätselcache: Man schreibt dazu, daß 2 Elemente der 7 Segmentanzeige defekt wären, schreibt aber nicht dazu welche es sind, und ob sie an- oder ausgehen oder wie auch immer... :p :p
Da fällt uns bestimmt noch viel ein.
Viel Kreativität und schönen Abend.
Stephan
 

Kappler

Geowizard
Gibt es bei dieser Art der Ansteuerung eigentlich keine Probleme?

Nach meinem rudimentären Elektronik-Halbwissen würde ich eher jedes Segment einzeln über einen Widerstand an die Ports anschließen statt einen Widerstand an die gemeinsame Kathode zu hängen...

Durch den Widerstand wird der Strom auf einen festen Wert begrenzt, unabhängig davon, wie viele Segmente leuchten.
Zeichen mit wenigen Segmenten müssten dadurch heller leuchten als Zeichen mit vielen Segmenten, da sich alle aktiven Segmente den festgelegten Strom "teilen" müssen...

Siehe auch hier
 

#ammensleben

Geocacher
das ist korrekt. nur ist es recht unkritisch in unserem Fall hier. Die unterschiedlichen
Helligkeiten sind zwar erkennbar, aber für die Funktionalität nicht von belang.
 
Oben