• 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

ksbender

Geocacher
_joker_ schrieb:
Mal eine Frage an die Programmierer. Wenn zwei gleich Zahlen hintereinander in der Datenzeile stehen, zeigt die Anzeige die Zahl ohne Unterbrechung doppelt so lange an.Ich habe das mit einem neuen Unterprogrammpunkt versucht zu losen und einen waitms Befehl eingefügt.

If Zeichen = "-" Then Gosub Pau 'kurze Pause zwischen gleichen Zahlen
Pau:
Waitms 2000
Return
Data "6" , "-" , "6" , "4"

Bei mir geht´s ohne waitms-Befehle. Quelle ist garaniert irgendwo ein Hinweis von Windi gewesen. Ich wäre von alleine nicht drauf gekommen. Ganz nebenbei spart der Powerdown Befehl auch noch kostbaren Speicherplatz - habe ich gelesen.
Hier der code, bei dem man die gleichen Zahlen doch noch mit einer kleinen Unterbrechung auflösen kann. Hängt natürlich auch ein bischen von der Entfernung ab.
Code:
Do
Reset Watchdog
Powerdown
Read Zeichen
Wdtcr = &B11010101                                          'Watchdog auf 0,5s 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 = "." Then Gosub Pp                              'schreibt . ins Display
If Zeichen = " " Then Gosub Leer

Wdtcr = &B11010011                                          'Watchdog wieder auf 125ms stellen
Alt = 1023                                                  'Doppelauslösung verhindern
If Zeichen = "X" Then Return
Loop


P0:
Porta = &B10001011
Portb = &B00000110
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

P1:
Porta = &B00001010
Portb = &B00000000
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

P2:
Porta = &B10000011
Portb = &B00000101
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

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

P4:
Porta = &B00001010
Portb = &B00000011
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

P5:
Porta = &B10001001
Portb = &B00000011
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

P6:
Porta = &B10001001
Portb = &B00000111
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

P7:
Porta = &B00001011
Portb = &B00000000
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

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

P9:
Porta = &B10001011
Portb = &B00000011
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

Pp:
Porta = &B00010000
Portb = &B00000000
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

Leer:
Reset Watchdog
Powerdown
Reset Watchdog
Powerdown
Reset Watchdog
Powerdown
Return

End

Daten:
Data "5" , "5" , " " , "4" , "4" , "." , "3" , "2" , "1"
Data " " , " "
Data "0" , "0" , "9" , " " , "3" , "3" , "." , "6" , "6" , "6"
Data " " , " " , "X"

Kannst ja mal ausprobieren.
Gruß
ksbender
 

Tossiman

Geocacher
Hallo Leute,
Nur kurze Info zu der Bascom Version,
ich habe es hinbekommen und zwar brauch der A/D-Wandler ein bisschen Zeit zum berechnen und die Variable "Ldr" damit zu füttern.

Code:
Code:
Start Adc
Waitms 250                                                  'A/D-Wandler starten
Ldr = Getadc(2)                                             'Helligkeitswert einlesen
Waitms 250
Stop Adc

Was mir dann noch aufgefallen ist, das in dem Hauptprogramm ein paar Fehler drin sind...
End If fehlte zwischendurch, ist zwar nicht schlimm, es wird vom Compiler auch nicht gemerkt, aber wir wollen ja alle ein zu 100% richtigen Code! ;)

Code:
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
   End If
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
   End If
Loop

sooo und dann muss man auch noch alle WDTCR in WDTCSR umbennnen, denn ein Tiny24 wurde das so umbenannt, das steht im Datenblatt, ansonsten ist das so richtig!

Was dann noch bei mir nicht funktionierte, war die PORT - Ausgaben, die waren ganz anders als im Beispiel!

Hier mal mein Code:
Code:
P0:
Portb = &B00000101
Porta = &B10001011
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

P1:
Portb = &B00000100
Porta = &B00001000
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

P2:
Portb = &B00000010
Porta = &B10001011
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

P3:
Portb = &B00000110
Porta = &B00001011
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

P4:
Portb = &B00000111
Porta = &B00001000
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

P5:
Portb = &B00000111
Porta = &B00000011
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

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

P7:
Portb = &B00000100
Porta = &B00001001
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

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

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

Pn:
Portb = &B00000101
Porta = &B10001001
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

Pe:
Portb = &B00000011
Porta = &B10000011
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

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

Links:
Wdtcsr = &B11010100
Portb = &B00000001
Reset Watchdog
Powerdown
Portb = 0
Porta = &B10000000
Reset Watchdog
Powerdown
Porta = 0
Porta = &B00000010
Reset Watchdog
Powerdown
Porta = 0
Portb = &B00000100
Reset Watchdog
Powerdown
Portb = 0
Porta = &B00001000
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

East:
Wdtcsr = &B11010101
Portb = &B00000101
Porta = &B10001011
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Portb = &B00000111
Porta = &B00000011
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Portb = &B00000011
Porta = &B10000010
Reset Watchdog
Powerdown
Porta = 0
Portb = 0
Return

North:
Wdtcsr = &B11010101
Portb = &B00000101
Porta = &B10001001
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Portb = &B00000110
Porta = &B10000010
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Portb = &B00000010
Porta = &B10000000
Reset Watchdog
Powerdown
Porta = 0
Portb = 0
Portb = &B00000110
Porta = &B10001010
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Return

Leer:
Reset Watchdog
Powerdown
Return

An dieser Stelle hänge ich dann noch meine Fusebits an und mal paar Fotos, wie man sowas in ein 14cm Petling bekommt ;)

Gruß Tossiman
7Segment_fusebits_bascom.JPG
IMG_0446_web.jpg
IMG_0447_web.jpg

Deckel bekomme ich natürlich noch zu ! :p
 

upigors

Geowizard
wie schon geschrieben, wenns neue erkenntnisse gibt hole ich mein geraffel gern wieder raus am montag und fang noch mal von vorn an. danke für die tips....
gruß uwe
 

Tossiman

Geocacher
Da ich gerade nochmals ein 7 Segment vergebaut habe und diesmal in Grün, ist mir aufgefallen, das die PORT's schon wieder nicht ganz hingehauen haben. entweder ;) habe ich die leitungen vertauscht, oder die Segmente sind unterschiedlich...

also da muss man erstmal ne runde tüfteln!...
Gruß :roll:
 

upigors

Geowizard
schläfst du auch mal irgendwann ? :???:
egal ob du die kabel oder in der anzeige was vertauscht ist, ich wäre ja schon froh wenn meine überhaupt mal was tun würde. aber du hast mir neue hoffnung gegeben.... :gott:
 

upigors

Geowizard
Tossiman schrieb:
Das freut mich! Schaffst das schon! ;)
hab ich, danke an Tossiman an dieser Stelle.
Aber da ich nun schon wieder weiter denke gleich mal noch ne Frage hinterher.
Wenn ich jetzt andere Buchstaben ausgeben lassen möchte muss ich ja die Portausgaben entsprechend ändern.
Ich nehm mal das Beispiel OST
Tossiman schrieb:
East:
Wdtcsr = &B11010101
Portb = &B00000101
Porta = &B10001011
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Portb = &B00000111
Porta = &B00000011
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Portb = &B00000011
Porta = &B10000010
Reset Watchdog
Powerdown
Porta = 0
Portb = 0
Return
wie muss ich port a und portb verändern oder anders gefragt wo finde ich eine entsprechende Zuordnung Für die Profis wird das eher eine lapidare Frage sein, für mich sind die 0en und 1en nur bömische Dörfer. Kann mich da jemand mal laienverständlich heranführen? Mir fehlt da der verständliche Zugang irgendwie
Am Beispiel "HALLO"
.... schrieb:
Morsen:
Restore Daten 'Am Beginn der Daten anfangen
Alt = 1023 'Doppelauslösung verhindern
Do
Read Zeichen
Wdtcr = &B11010111 'Watchdog auf 2s stellen
If Zeichen = "Hallo" Then Gosub Hallo 'schreibt HALLO ins Display
Wdtcr = &B11010011 'Watchdog wieder auf 125ms stellen
If Zeichen = "X" Then Return
hab ich oben geändert aber dann hörts erstmal auf....
Danke im Vorraus wenn sich jemand mal die Zeit nimmt das weiter kurz zu erläutern....
OK. Anders gefragt, wie wird aus
"O"
Portb = &B00000111
Porta = &B00000011
ein "H"
innerhalb der Ports, wie sind den 0en und 1en die Balken der Anzeige zugeordnet?
 

schnasemann

Geocacher
das hast Du ähnlich schon auf Seite 1 dieses Threads gefragt.
Portb = &B00000101
bedeutet z.B., dass Port B von rechts nach links
PORT b.0-pin auf 1
PORT b.1-pin auf 0
PORT b.2-pin auf 1
PORT b.3-pin auf 0
PORT b.4-pin auf 0
PORT b.5-pin auf 0
PORT b.6-pin auf 0
PORT b.7-pin auf 0
gesetzt wird.

Wenn Du nun weißt, an welchem Portpin welcher Balken Deiner 7-Segment-Anzeige ist, kannst du durch setzen der gewünschten Portpins definieren, was alles leuchtet.

HTH
schnasemann

PS: Im Kochbuch sind auch die ersten Grundlagen drin, im Datenblatt von dem Mikrocontroller steht auch was dazu, einfach mal lesen, dann wird das schnell klar.
 

upigors

Geowizard
schnasemann schrieb:
das hast Du ähnlich schon auf Seite 1 dieses Threads gefragt.
na ja, da ging es aber um die "sub-daten" wie # ammensleben die nannte.
das wurde mir schnell klar, die hab ich einfach nicht gesehen.....
aber ich denke mal mit der port pin zuordnung die du eben gepostst hast sollte selbst ich das verstehen :eek:ps:
ich schau mir das morgen auf arbeit mal am rechner an, danke erstmal bis dahin und schönen abend noch
gruß uwe
 

upigors

Geowizard
hmmm ....
nehmen wir mal folgenden Programmschnipsel:
East:
Wdtcsr = &B11010101
Portb = &B00000101
Porta = &B10001011
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Portb = &B00000111
Porta = &B00000011
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Portb = &B00000011
Porta = &B10000010
Reset Watchdog
Powerdown
Porta = 0
Portb = 0
Return

und davon das "o"
da steht: Portb = &B00000101
da sehe ich nur 2 aktive pins und somit 2 aktive balken der anzeige.... :???:
 

_joker_

Geocacher
@upigors
hallo Meister der Elektronik, kann es sein das du einen anderen Schaltplan hast als ich? Bei mir hängt so ein Teil im Wald und funktioniert. Nur hab ich irgendwie einen andere Pinbelegung im Schaltplan. Bei mir ist z.B.
-> g auf PA3

auf Seite 1 aber ist g -> PA0

und schon ergeben sich hier in eurer Diskussion ein ganz anderes Balkenbild!

Gruß _joker_

PS ich hab nicht nochmal alles hier gelesen, aber nachgebaut und auf meinen Kram umgestrickt.
 

upigors

Geowizard
na ja das mit dem meister scheint etwas übertrieben wenns an sowas einfachem wie der zuordnung hackelt.... :???:
ja ich musste auch ein paar änderungen vornehmen, in der 2. reihe also pin 6-10 an der 7-segment anzeige waren jeweils 2 paare vertauscht.....
aber das war im verhältnis einfach
gruß uwe
 

qByter

Geocacher
da steht: Portb = &B00000101
da sehe ich nur 2 aktive pins und somit 2 aktive balken der anzeige.... :???:
Weil die restlichen Segmente an PortA hängen? Da steht ja noch
Porta = &B10001011
Und schon hast Du 7 Segmente, die leuchten... :D


Nur hab ich irgendwie einen andere Pinbelegung im Schaltplan.
Der Schaltplan auf Seite 1 dieses Threads hat leider ein paar Dreher, der richtige ist auf Seite 4 zu finden, in dem Zip von kirby27b, damit passt alles.
 

schnasemann

Geocacher
wenns nun einer hinbekommen hat (ich selber brauche es gerade nicht, sonst würde ich mir das mal angucken), könnte er ja auch so gnädig sein und das evtl. ins wiki mit einpflegen, samt brauchbarem Schaltplan und evtl. der Bezeichnung der verwendeten Siebensegmentanzeige.
Hier die http://www.wikihost.org/w/rl/

Grüße,
schnasemann
 

upigors

Geowizard
schnasemann schrieb:
wenns nun einer hinbekommen hat (ich selber brauche es gerade nicht, sonst würde ich mir das mal angucken), könnte er ja auch so gnädig sein und das evtl. ins wiki mit einpflegen, samt brauchbarem Schaltplan und evtl. der Bezeichnung der verwendeten Siebensegmentanzeige.
Hier die http://www.wikihost.org/w/rl/

Grüße,
schnasemann

ich hab vorhn schon mal rein geschaut, war aber verunsichert.
das wiki nennt sich " ... mit Attiny 13...." und der Aufruf kommt im Tread für die 7 Segment Anzeige....
Nun wusste ich nicht was du da sammeln willst.
bin gern bereit Stückliste, Scahltplan (auch wenn er nicht von mir ist) und Programmcode dort einzupflegen
gruß Uwe
 

schnasemann

Geocacher
kann man ja ändern und schreibt generell Reaktivlicht mit uC als Überschrift.
Werde ich heute abend mal machen.

PS: Das Wiki lebt eben gerade davon, dass unterschiedliche Leute was ändern. Da kann man die Seite einfach ändern und schreibt in den Kommentar (nur beim editieren sichtbar) dann, was man geändert hat. Vielleicht auch, warum. Also, upigors, trau Dich :D
 

upigors

Geowizard
na ich hab mal testweise angefangen aber das erklärt sich ja relativ gut selbst ;)
mal sehen wie das mit Bildern wird, wenn ich das richtig gesehen hab werden die ja nur verlinkt....
Komme aber erst am montag dazu was zu machen, freitag ist hier immer etwas trubelig auf arbeit.
gruß uwe

p.s. gibts nen einfaches programm um schaltpläne zu zeichnen?
p.p.s. sollte der admin die letzten Beiträge abtrennen denn die haben ja nix mit der 7-Segment-Anzeige aus der Treadüberschrift gemeinsam
 

schnasemann

Geocacher
wenn der Admin das in einen neuen Thread überführen möchte, gerne.
Das mit den Bildern habe ich auch nicht kapiert, ich bekomme die nicht so recht eingebunden und überlege, ob ich im Anfangsstadium nicht noch (schnell) auf ein anderes Wiki wechsel, bei dem das mit den Bildern einfacher ist.
Zum Zeichnen von Schaltplänen gibt es Eagle. Da ist die neue Version aber optisch krass anders zur 4.xx, das finde ich nicht gelungen. Auch sind manche Bauteile im Schaltplan sehr konfus pintechnisch angeordnet, ich mache das oft lieber so, wie nachher auch im Layout die Pinanordnung ist.
Anschauen kann mans aber trotzdem mal.

PS: Danke für Deine Mitarbeit
 
Oben