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

LCD Display am ATtiny 24

Windi

Geoguru
Was mich jetzt etwas wundert ist, dass der Tiny24 keinen PortD hat, in Deinem Programm aber dem LCD der PortD zugewiesen wird.
 
OP
K

ksbender

Geocacher
Ja Wolfgang, hast ja recht, es ist ein 2313 in der Schaltung.
Auf dem Steckbrett erkennt man unten rechts in der Ecke neben den beiden Poti´s und der 7-Segmentanzeige den "geparkten" 24er.
UND außerdem geht der Nachtcache wenn ich es richtig sehe nicht mit dem 2313 wegen fehlendem ADC.
Gruß
Stephan
 

Windi

Geoguru
ksbender schrieb:
Ja Wolfgang, hast ja recht, es ist ein 2313 in der Schaltung.
Auf dem Steckbrett erkennt man unten rechts in der Ecke neben den beiden Poti´s und der 7-Segmentanzeige den "geparkten" 24er.
Und wie schaut es dann mit der Funktion beim 24er aus?
Hätte doch eigentlich mit Deinem alten Programm auch funktionieren müssen?
 
OP
K

ksbender

Geocacher
Windi schrieb:
Und wie schaut es dann mit der Funktion beim 24er aus?
Hätte doch eigentlich mit Deinem alten Programm auch funktionieren müssen?
Stimmt, habe ich aber noch nicht ausprobiert.
Jetzt kommt als nächstes eine kleine Routine, die eine Begrüßung und die Koordinaten 5 mal im Wechsel aufleuchten läßt.
Dann muß ich noch die Hintergrundbeleuchtung über einen Port an- bzw. ausschalten.
Und zum guten Schluß die Fotodiode nach Kochbuch dranhängen.
Fertig bin ich also noch lange nicht. Aber einen kleinen Erfolg und die Aussicht, daß es klappen kann, ist ja auch schon mal was. Habe doch erst vor einem halben Jahr mit diesen Spielereien angefangen ;-)
Gruß
Stephan
 

Windi

Geoguru
Denke beim Experimentieren daran, dass der 2313 keinen AD-Wandler hat.
Wenn Du es "spacig" willst dann kannst Du die LCD-Hintergrundbeleuchtung auch über PWM dimmen bzw. langsam ein- und ausblenden.
 
OP
K

ksbender

Geocacher
ERFOLGSMELDUNG!!!!
Nachdem ich ja gestern hier keinen Beitrag geschrieben habe und heute in der Überschrift Erfolgsmeldung steht, könnt ihr euch bestimmt denken woran es lag?
Gestern hätte ich den ganzen Mist am liebsten in die Ecke geschmissen.
Heute trinke ich auf den nächsten zurückgelegten Schritt noch ein Bier ;) .
Warum Erfolgsmeldung? Ich habe nach reichlich vielen Problemen eben ein LCD Display wie im Titel des Threads genannt an einem ATtiny 24 zum Laufen gebracht.
Warum es so viele Schwierigkeiten gab, kann ich nicht sagen. Aber es funktioniert tatsächlich. Den weiter oben eingestellten Code konnte ich nicht einfach vom Tiny 2313 auf den 24 er schieben.
Das letzte was ich geändert habe war die Frequenz.
Jetzt läuft´s ;)
Später werde ich dann mal einen Schaltplan und den Code einstellen.
 
OP
K

ksbender

Geocacher
upigors schrieb:
jepp, wäre nett. hab das programm so wie es da oben steht auch nicht zum laufen bekommen mit nem 24'er

Nu mal nicht so ungeduldig. Wie du siehst, ist die Sache nicht ganz so einfach.
Derzeitiger Stand in meinem Keller ist folgender:
- Programm auf den ATtiny 24 übertragen
- Ansteuerung über Photodiode (nach Windi/Kochbuch) eingearbeitet und erfolgreich getestet
- Ein- bzw. Ausschalten der LCD-Hintergrundbeleuchtung eingearbeitet und erfolgreich getestet

Ausstehender Punkt:
- Ein-bzw. Ausschalten der Logik des Displays zur Reduzierung des Stromverbrauchs.

Das hat bis jetzt nicht geklappt. So ganz schwierig sollte es eigentlich nicht sein. Den dafür vorgesehenen Port habe ich mal mit einer LED getestet. Die funktionierte nach meinen Vorstellungen - gleicher Port dann mit der Logik leider nicht.

Danach kommt dann Schaltplan und Programm - aber das kann noch etwas dauern. Bin diese Woche wieder in Bratislava unterwegs.
 

chr2k

Geomaster
geghe ich richtig in der annahme, dass der Tiny2313 mit denselben Pins (PB0, PB1, PB2, PB5, GND) an den ISP Programmer angeschlossen wird?
 

hendyp

Geocacher
chr2k schrieb:
geghe ich richtig in der annahme, dass der Tiny2313 mit denselben Pins (PB0, PB1, PB2, PB5, GND) an den ISP Programmer angeschlossen wird?
Nein. Stünden in der Klammer die Pin-Bezeichnungen MISO, MOSI, SCK, RESET und GND könnte ich Dir zustimmen, dann wären es nämlich dieselben Pins ;) Wo die beim ATtiny2313 liegen, guckst Du am besten im Datenblatt.

(Bei den meisten AVRs sind es diese Pin-Bezeichnungen; es gibt aber einzelne Typen, bei denen andere Pins verwendet werden. Genaueres über das Programmierinterface findet sich im Kapitel Memory Programming -> Serial Downloading.)

Gruß,
hendyp
 

thomas_st

Geowizard
ksbender schrieb:
Auch wenn´s im Datenblatt nicht explizit angegeben ist, im Katalog von Reich*** steht, daß der Controller HD44780 kompatibel ist (der ist wohl standard).
Zunächst hatte ich hier das Problem vermutet: es sind wohl einige HD44780-"kompatible" Controller auf dem Markt, die sich in der Initialisierungssequenz, insbesondere wohl im Zeitverhalten vom HD44780 unterscheiden. Aber nun scheint es ja zu gehen.

gomerffm schrieb:
wenn ich recht erinnere, muß man bei betrieb im 4-bit-modus die nicht benötigten datenleitungen des displays auf masse legen.
Da scheint es Unterschiede zu geben. Ich habe ein Display verbaut (hat nichts mit GC zu tun, daher hier nicht vorgestellt) bei dem die unbenutzten Ports frei in der Luft hängen und welches problemlos funktioniert.

ksbender schrieb:
Das letzte was ich geändert habe war die Frequenz.
Merkwürdig. Könnte es sein, das da irgendwo Delays sind, die mit der falschen Frequenz bei der Initialisierung mist gebaut haben, also eine zu lange oder zu kurze Verzögerung hatten?

Viele Grüße,
Thomas(_st)
 
OP
K

ksbender

Geocacher
thomas_st schrieb:
Merkwürdig. Könnte es sein, das da irgendwo Delays sind, die mit der falschen Frequenz bei der Initialisierung mist gebaut haben, also eine zu lange oder zu kurze Verzögerung hatten?

Keine Ahnung :irre: :???:
Bei nächster Gelegenheit stelle ich mal den Code ein. Vielleicht können dann die Experten unter euch einmal Verbesserungsvorschläge machen :roll: .

Auf jeden Fall bin ich fast durch :D :D :D
Gruß
ksbender
 
OP
K

ksbender

Geocacher
ksbender schrieb:
Bei nächster Gelegenheit stelle ich mal den Code ein.

So, hier ist die Gelegenheit.
Zunächst einmal der Code:
Code:
'============================================================
'
' ***********************************************************
' *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
' *** Tiny-Reaktiv-LCD mit LDR und A/D-Wandler            ***
' *** mit Watchdog-Energiesparmodus und Tagabschaltung    ***
' *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
' *** erstellt von ksbender für www.geoclub.de            ***
' *** mit Verwendung von wichtigen Programmbestandteilen  ***
' *** von Windi bzw. aus dem Kochbuch für das RL          ***
' *** Parsau, 12.01.2009                                  ***
' *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
' ***********************************************************
'
' µC: ATtiny24V
' +Ub: 5,00 V
'============================================================

$regfile = "ATtiny24.DAT"                                   'Definition des verwendeten µC's
$crystal = 128000                                           'Frequenz des internen Oszillators
$hwstack = 20                                               'Hardwarestack herabsetzen damit genügend Variablen zur Verfügung stehen
Config Adc = Single , Prescaler = Auto
Config Porta = &B0011111                                    'PinA.0 bis PinA.5 auf 'Ausgang', Rest auf 'Eingang' schalten
                                                             '6 Ausgänge für den Anschluß ans Display
Config Portb = &B0000111                                    'PinB.0 bis PinB.2 auf 'Ausgang', Rest auf Eingang
                                                             'PinB.0 für Logik, PinB.1 für Hintergrundbeleuchtung
Config Lcd = 16 * 2                                         'für ein Display mit 16 Zeichen in 2 Zeilen
Config Lcdpin = Pin , Db4 = Porta.2 , Db5 = Porta.3 , Db6 = Porta.4 , Db7 = Porta.5 , E = Porta.1 , Rs = Porta.0
Config Lcdbus = 4                                           'zur Beschreibung des Datenmodus

Portb = 0                                                   'Ausgänge auf Low setzen
Porta = 0                                                   'Ausgänge auf Low setzen

Stop Ac                                                     'Analog-Komparator abschalten, um Strom zu sparen
Stop Adc

Wdtcr = &B11010011                                          'Watchdog definieren: 0.125 Sekunden, Interrupt auslösen, kein Reset
Enable Interrupts                                           'Interrupts freigeben
Const Schwelle = 100                                        '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 I As Integer

Do                                                          'Start der Haupt-Schleife - Abfrage LDR
Reset Watchdog
Powerdown                                                   'Prozessor bremsen da sonst Lichtänderung nicht erkannt wird
Start Adc                                                   'A/D-Wandler starten
Waitms 1                                                    'Warten, dass ADC Wandler sicher loslaufen kann
Ldr = Getadc(7)                                             'Helligkeitswert von Port PA7/Pin6 einlesen
Waitms 1                                                    'Warten, dass Messung abgeschlossen ist
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 Blinken                     '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


Blinken:                                                    'Unterroutine zur Ausgabe auf dem LCD Display
Portb.2 = 1                                                 'LED zur Aufmerksamkeit einaml an
Wait 20
Portb.2 = 0                                                 'LED wieder aus
Portb.0 = 1                                                 'Logik für Display einschalten
Wait 2                                                      'Warten, dass Logik richtig läuft
Portb.1 = 1                                                 'Hintergrundbeleuchtung einschalten
Wait 1
Initlcd                                                     'Display initialisieren
Cursor Off Noblink                                          'keinen Cursor im Display anzeigen

Cls                                                         'Display löschen
For I = 0 To 1                                              'Schleife um Geocacher mit Koordinaten zu versorgen
Wait 2
Locate 1 , 1
Lcd " Welcome Cacher"                                       'Willkommen´s Nachricht kann verändert werden
Locate 2 , 1
Lcd " now go to ..."                                        '2. Zeile Willkommen´s Nachricht
Wait 40                                                     'Soll man lesen können
Cls                                                         'Display wieder löschen, da es nicht komplett überschrieben wird
Wait 1                                                      'Warten bis Display gelöscht
Locate 1 , 1
Lcd " N  52 32.129"                                         'Die nächsten Koordinaten von N
Locate 2 , 1
Lcd " E 010 53.025"                                         'und von E natürlich
Wait 60                                                     'immer schön lesen lassen :-)
Cls                                                         'Display wieder löschen
Next I
Cls
Portb.1 = 0                                                 'Hintergrundbeleuchtung ausschalten um Strom zu sparen
Wait 2
Portb.0 = 0                                                 'Logik Display ausschalten um Strom zu sparen
Wait 5
Portb.2 = 1                                                 'LED zur Aufmerksamkeit einaml an
Wait 2
Portb.2 = 0                                                 'LED wieder aus
Return


Pause:                                                      'Unterroutine für Schlafstellung um Strom zu sparen
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
Portb.2 = 1
Reset Watchdog
Powerdown
Portb.2 = 0
Schlafzaehler = 0
End If
Return


End

Als Anhang der Anschluß frei nach Kochbuch und natürlich noch der Schaltplan.

Und zum Guten Schluß hab ich da nochetwas:
Anbei noch die Stückliste von den Sachen, die ich bei Reich*** eingekauft habe und die sich bisher nur auf dem Steckbrett tummeln:
ATTINY 24V-10PUAtmel AVR-RISK-Controller
LCD 162C LED Display
A906014 Fotowiderstand
LED5-4500 RT LED, 5 mm, ultrahell, farblos, klar, rot
1/4W 56 Kohleschichtwiderstand, 1/4W, 5%, 56 Ohm
1/4W 4,7M Kohleschichtwiderstand, 1/4W, 5%, 4,7 M-Ohm
64W-10K Präzisionspoti. 25 Gänge, stehend, 10 K-Ohm

Für die Montage in einem Nachtcache benötigt man weiterhin:
HALTER 4XUM3-QDK Batteriehalter für 4 AA Zellen (Mignon)
CLIP HQ9V Batterieclip für 9-Volt-Block
LCD Front2 LCD Rahmen für 2 x 16 Zeichen, schwarz

sowie ein wasserdichtes Gehäuse und LED Halterung nach eigenen Vorlieben.
Ich setzte die Fotowiderstände auch immer in eine LED Chromfassung und gieße das dann mit durchsichtigem Harz aus. So kann ich an dieser Stelle den Fotowiderstand viel besser vor Korrosion schützen.
Meine "Hinweis"-LED sitz normalerweise in einer Einbaufassung, 5 mm, chrom (EBF LENS-5) und ist so auch geschützt.
Zusätzlich setze ich Silicagel ein, um ein Beschlagen der Gehäuse von innen zu verhindern. Dies kann man regenerieren oder erneuern, wenn die Batterien nach einiger Zeit ersetzt werden müssen.

Jetz viel Spaß beim Nachbau und bei der Optimierung.
Gerade mit den unsaglichen wait-Befehlen müßte sich noch einiges verbessern lassen. Aber Hauptsache erstmal: Es läuft zuverlässig.
Gruß
Stephan
 

Anhänge

  • LCD_LDR_ATtiny24.jpg
    LCD_LDR_ATtiny24.jpg
    33,1 KB · Aufrufe: 495

Starglider

Geoguru
thomas_st schrieb:
gomerffm schrieb:
wenn ich recht erinnere, muß man bei betrieb im 4-bit-modus die nicht benötigten datenleitungen des displays auf masse legen.
Da scheint es Unterschiede zu geben. Ich habe ein Display verbaut (hat nichts mit GC zu tun, daher hier nicht vorgestellt) bei dem die unbenutzten Ports frei in der Luft hängen und welches problemlos funktioniert.
Laut Datenblatt des HD44780 werden DB0...DB3 im 4-Bit-Modus nicht benutzt ("These pins are not used during 4-bit operation").
Ich lasse sie frei und das hat bei den 3 verschiedenen Typen von HD4470-kompatiblen Displays die ich bisher verwendet habe funktioniert.
 
OP
K

ksbender

Geocacher
chr2k schrieb:
mir scheint so als wäre mein display defekt

Eins habe ich mir bei den ganzen Versuchen auch zerschossen.
Schade... aber beim nächsten mal muß ich halt besser aufpassen.
Vielleicht bestelle ich mir versuchsweise auch mal welche von Poll**.
Wie es aussieht, haben die auch welche mit "kompatiblem" Controller - und das ein bischen preiswerter als bei Reiche**.
Schaun wir mal.

Erstes LCD Display hängt schon im Wald. Von dem Multi fehlen aber noch 3 Stationen. Da trocknet gerade der Tarnanstrich ;-)

Wenn der Multi veröffentlicht ist, stelle ich hier mal einen Link ein.
Gruß
ksbender
 
OP
K

ksbender

Geocacher
Jetzt hängt eins im Wald und eins noch für weitere Versuche in meiner kleinen Werkstatt.
Die Cachebeschreibung ist noch in Arbeit. Darum sind die folgenden Fotos auch keine Spoiler :p

Eigentlich zu schade, um das gute Teil bei der Bucht einzustellen.
Ok, käme auf den Preis an :D :D :D

Grüße
Stephan
 

matzemops

Geocacher
Hallo zusammen,
vorhin war ich ganz glücklich, das das LCD-Display am ATtiny 24 lief. Es zeigte die Nord und Ostkoordinate wie gewünscht an.

Dann habe ich im Text rumgespielt und dabei wohl zu viele Zeichen eingegeben. Seitdem zeigt das LCD-Display in Zeile eins nur noch 16 schwarze Kästchen an und in Zeile zwei gar nix mehr.

Hier mal zur Sicherheit der Code, mit dem es vorhin funktionierte und den ich jetzt wieder aufgespielt habe:

Code:
$regfile = "ATtiny24.DAT"
$crystal = 128000

$hwstack = 32
$swstack = 8
$framesize = 24
Config Lcd = 16 * 2

Config Lcdpin = Pin , Db4 = Porta.2 , Db5 = Porta.3 , Db6 = Porta.4 , Db7 = Porta.5 , E = Porta.1 , Rs = Porta.0
Config Lcdbus = 4


Dim I As Byte
Initlcd
Cursor Off Noblink
Cls
Waitms 100
Locate 1 , 1
Lcd "N  50 12.345"
Locate 2 , 1
Lcd "E 008 12.345"
Do
nop
Loop
End
 
Oben