PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ...mit logischer "1" LCD "zuschalten" ?



Kugelblitz
06.01.2012, 21:41
Hallo Gemeinde,

habe eine "elektronische" Frage, ich habe ein BASCOM Programm für einen Atmega8 "zusammengedengelt" welches
zunächst einmal so funktioniert wie ich möchte (...ausgehende von einem Startdatum und einem Zieldatum wird
ein Count-down der Sekunden über LCD angezeigt). In meinem Quellcode lasse ich circa alle 15 Sekunden
für 10 Sekunden den Pin C.5 logich "1" werden. Würde nun gerne mit dieser logischen 1 das LCD-Display "zuschalten", soll heißen...
das Programm läuft ganz normal ab, aber das LCD bleibt dunkel, alle ca. 15 Sekunden wird es mit der logischen 1 von Pin C.5
"versorgt" und zeigt für ~ 10Sek. das Ergebnis an :-)

...wie nehme ich der LCD Anzeige VCC weg und versorge es mit der logischen "1" vom PinC.5???

...bin um jeden Tip dankbar...


Gruß Kugelblitz

Crazy Harry
06.01.2012, 21:50
Hi Kugelblitz,

das wird so einfach nicht funktionieren, da du das Display nach jedem einschalten neu initialisieren mußt. Außerdem darfst du auf das Display nichts ausgeben, wenn es nicht eingeschaltet ist - das Programm könnte sich sonst aufhängen da es auf eine Rückmeldung vom Display wartet.
Ansonsten kannst du die Stromversorgung des Displays mit einem Transistor (gesteuer mit deinem PinC.5) aus/einschalten.

gruss
Harry

Kugelblitz
06.01.2012, 21:57
Hallo Harry :-)

danke für die schnelle Reaktion, was du geschrieben hast, habe ich verstanden, wähle Tor 3 :-)

...wie kann ich die Stromversorgung des Displays mittels Transistor aus/einschalten???
Hast du da 'ne "Hardware-Idee" ???

Gruß Kugelblitz

PICture
06.01.2012, 23:05
Hallo!

Wenn du nur nix sehen willst, könntest du hoffentlich nur Beleuchtung bzw. Kontrast ändern. ;)

Kugelblitz
06.01.2012, 23:10
ja, ja, ja,


egal was, aber wieeeeeeeee ist die Frage...
Energie ist mir egal, soll doch das Programm die ganze Zeit versorgt werden... aber wieeeeee
realisiere ich tehnisch, das die Anzeige nur "ab unbd zu" erscheint :-) :-) :-)

Kampi
06.01.2012, 23:38
Du kannst das Display vom Kontrast her ganz hell stellen, sodass man nichts mehr sieht ;)

PICture
06.01.2012, 23:42
Am einfachsten wäre den Kontrastpin vom Display direkt mit Portpin (Ausgang) vom µC verbinden. Dann ist der Kontrast bei L maximal und bei H minimal, sonst kommt ein Potentiometer zum gewünschten Einstellen dazwischen. ;)

Kugelblitz
07.01.2012, 09:25
:p cleverer Tipp,
danke dafür, den werde ich heute testen :-)

mfg Kugelblitz

Kugelblitz
07.01.2012, 14:02
Hi PICture,

das war es leider noch nicht, mache ich es wie du gesagt hast (Kontrastpin an uC Pin) "kommt" die Anzeige nicht wieder, soll heisen
bleibt dunkel, nun bin ich wieder ratlos.

mfg Kugelblitz

Hubert.G
07.01.2012, 14:22
Wäre es nicht einfacher das Display einfach zu löschen. In meiner Lib gibt es dafür ein lcd_clrscr(); dann ist es leer.
Ich nehme an das es in BASCOM auch so was gibt.

Rone
07.01.2012, 16:04
Hallo!

Warum einfach, wenns kompliziert auch geht.
Mal im Ernst: Einfach Cls so wies HubertG. schon geschrieben hat

MfG

Rone

Kugelblitz
07.01.2012, 16:18
...kein Problem ist so banal, als das es bei näherem hinschaeuen nicht noch größer werden könnte :-)
...danke für den Klaps auf den Hinterkopf, teste es abends mal :-)

PICture
07.01.2012, 17:06
Hallo!

Es bleibt "dunkel", weil angeblich der Kontrastpin in H Zustand bleibt (Softwareproblem). ;)

Crazy Harry
07.01.2012, 19:15
Eine Gegenfrage: Wieso soll das Display nichts anzeigen ? Willst du nicht, daß man was sieht ?

gruss
Harry

Kugelblitz
08.01.2012, 11:27
Hallo Harry,

aaaaaalso, ich war wohl in meiner "Problembeshreibung" nicht ganz aufrichtig :(

In meinem Programm läuft in der Do-Loop-Schleife eine Berechnung welche in jeder Sekunde auf dem LCD ein Ergebnis zeigt.
Meine Idee war nun nicht die ganze Zeit die Anzeige darstellen (die Berechnung soll in Hintergrund weiter laufen).
Also habe ich alle ~10 Sekunden für ~5 Sekunden den Pin C.5 auf "1" gesetzt. Mit dieser "1" wollte ich das Display steuern,
also alle 10 Sek. für 5 Sek. das LCD "befeuern".
Ich habs nicht hinbekommen, nehem ich dem Display den Pin3 (Kontrast) weg, wird es logischer Weise dunkel, gebe ich ihm Masse zurück
(und zwar nur die Masse des definierten Dispayports) funktioniert es. Masse vom Board funktioniert nicht, dann kommt das Display durcheinander
und zeigt alles schwarz???.
Habe nun mit einem Bauerntrick experimentiert und mit meiner logischen "1" ein CMOS-IC 4066 befeuert (4 digitale Schalter).
Einer dieser Schalter unterbricht die Kontrastleitung...brauch ich halt noch ein IC, schade, 'ne Softwarelösung wäre mir lieber gewesen :(

...trotzdem danke an alle, treffen uns beim nächsten Problem wieder :) :) :)


gruß Kugelblitz

for_ro
08.01.2012, 11:43
also alle 10 Sek. für 5 Sek. das LCD "befeuern".
Und warum kannst du nicht einfach 5 Sekunden nichts zum LCD schicken? Verstehe ich nicht.
Wenn das LCD dazwischen leer sein soll, dann vorher noch ein CLS.



Habe nun mit einem Bauerntrick experimentiert und mit meiner logischen "1" ein CMOS-IC 4066 befeuert (4 digitale Schalter).
Einer dieser Schalter unterbricht die Kontrastleitung...brauch ich halt noch ein IC, schade, 'ne Softwarelösung wäre mir lieber gewesen :(

Ziemlich viel Aufwand, der Sinn bleibt mir verborgen.

Kugelblitz
08.01.2012, 11:58
Hallo for_ro

ja, ja ziemlich viel Aufwand, haste recht, ich glaube ich denke zu verbogen, "einfach 5 Sek. nichts zum LCD schicken" ist wohl der Schlüssel.
Ich glaube ich denke schon zu lange darüber nach :-)
Jetzt geh ich mal spazieren, wenn ich wiederkomme mache ich einen neuen anlauf und versuche mal 5 Sekunden nix zu schicken.

danke für den hinweis, werde später mal das Programm "verschlimmbessern"

gruß Kugelblitz

Kugelblitz
08.01.2012, 14:30
...so, war spatzieren, hat aber nix gebracht,

deshalb poste ich euch das ganze Ausmaß des Elends---


$regfile "2313def.dat"
$crystal = 3686400
$baud = 9600

Dim Sekunden As Long
Dim Tik As Integer
Dim Minuten As Long
Dim Stunden As Long
Dim Tage As Integer
Dim Starttag As Byte , Startmonat As Byte , Startjahr As Byte
Dim Zieltag As Byte , Zielmonat As Byte , Zieljahr As Byte
Dim Bday1 As Byte , Bmonth1 As Byte , Byear1 As Byte
Dim Bday2 As Byte , Bmonth2 As Byte , Byear2 As Byte
Dim Datdiff1 As Integer , Datdiff2 As Integer
Dim Wert As Integer

Deflcdchar 0 , 32 , 24 , 30 , 7 , 27 , 24 , 22 , 16
Deflcdchar 1 , 24 , 24 , 28 , 12 , 30 , 31 , 31 , 15
Deflcdchar 2 , 6 , 1 , 1 , 32 , 32 , 32 , 16 , 16
Deflcdchar 3 , 16 , 1 , 14 , 12 , 1 , 7 , 32 , 16
Deflcdchar 4 , 30 , 30 , 8 , 32 , 32 , 32 , 32 , 32
Deflcdchar 5 , 32 , 32 , 32 , 4 , 24 , 32 , 32 , 32
Deflcdchar 6 , 23 , 19 , 15 , 12 , 8 , 10 , 15 , 15
Deflcdchar 7 , 7 , 7 , 7 , 7 , 5 , 13 , 24 , 16



'LCD CONFIG'
'----------'
Config Lcd = 20 * 4
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcdbus = 4

Enable Interrupts
Config Clock = User
Config Date = Ymd , Separator = . ' ANSI-Format

Starttag = 08 : Startmonat = 01 : Startjahr = 12 : Datdiff1 = Sysday(starttag)
Zieltag = 24 : Zielmonat = 12 : Zieljahr = 12 : Datdiff2 = Sysday(zieltag)

Tage = Datdiff2 - Datdiff1

Tik = 0
Stunden = Tage * 24
Minuten = Stunden * 60
Sekunden = Minuten * 60

Config Timer1 = Timer , Prescale = 1024 'Bestimmt das Timer 1 verwendet
Enable Timer1
On Timer1 Test
Enable Interrupts
Timer1 = 61935
Cls

Do ' Schleifenanfang
Cursor Off Noblink
Locate 1 , 1
Lcd " nur noch " ; Sekunden
Locate 2 , 1
Lcd " Sekunden bis...???"
Locate 3 , 8 : Lcd Chr(0) ; Chr(2) ; Chr(4) ; Chr(6)
Locate 4 , 8 : Lcd Chr(1) ; Chr(3) ; Chr(5) ; Chr(7)

Waitms 50
If Tik = 25 Then Gosub Tiktest1 'Ausgang C.5 ein [15]
If Tik = 35 Then Gosub Tiktest2 'Ausgang C.5 aus [25]
'Differenz von 10 entspricht ~ 10Sek eingeschaltet

Loop
End

Test:
Incr Tik
Decr Sekunden
Timer1 = 61935 ' Timer soll ab 61935 hochzählen
Return

Tiktest1:
Portb.5 = 1
Return

Tiktest2:
Tik = 0
Portb.5 = 0
Return
'

...zwischen Tiktest1 und Tiktest2 sollte nach meiner Idee das LCD Display
das Ergebnis anzeigen...

mfg
Kugelblitz

Kugelblitz
08.01.2012, 14:32
P.S.
wenn es nicht üblich ist Prog-teile auf diese Art zu posten, bitte bescheid sagen,
hänge ich das Prog das nächste mal an :-)

Kugelblitz

Hubert.G
08.01.2012, 18:11
Das ist schon so OK.
Ich kann nur kein BASCOM. In C würde ich das so machen, wenn du den Port auf 1 setzt also Ausgabe dann ein Flag setzen.
Vor der LCD-Ausgabe ein if in dem du das Flag abfragst. Wenn Flag dann LCD Ausgabe, wenn kein Flag dann nicht.
Ich hoffe das war einigermassen Verständlich.

Searcher
08.01.2012, 18:51
@Kugelblitz: Möchtest Du mit Portb.5 den Kontrast ein/aus schalten? Ich kann nicht finden, wo Portb.5 als Output konfiguriert ist.

Gruß
Searcher

Kugelblitz
08.01.2012, 19:25
...moin, moin Hubert,

jou, verständlich war das, an meinem Quellcode kannste sehen ich kann werde BASCOM vernüftig noch C oder C++ oder Assembler,
habe ein gefährliches halbwissen :-)

Aber die Idee ist gut, werde die Befehlslage in BASCOM prüfen ob sich etwas findes was in diese Richtung geht, danke für den Tipp


gruß Kugelblitz

Kugelblitz
08.01.2012, 19:28
@ Searcher

mhmmm??? stimmt, habe PortB.5 nicht explizit als Output gekennzeichnet!!!!
Habe aber in meiner Versuchanordnung 'ne LED an Port B.5, die ist immer schön "angegangen",
gehe also davon aus der Portbefehl funzt...

Searcher
08.01.2012, 20:21
@ Searcher
mhmmm??? stimmt, habe PortB.5 nicht explizit als Output gekennzeichnet!!!!
Habe aber in meiner Versuchanordnung 'ne LED an Port B.5, die ist immer schön "angegangen",
gehe also davon aus der Portbefehl funzt...

kann ich anhand Deines Programms nicht erklären. Der Port ist nach Reset des AVR als Input initialisiert - also hochohmig.

Würd es auf jeden Fall nochmal mit CONFIG PORTB.5 = OUTPUT versuchen, wenn Schalten der Kontrastleitung noch aktuell ist.

Insgesamt würd ich auch versuchen die Anzeige über die lcd Kommandos zu unterdrücken. Hab selber keins und kann dazu nichts sagen.

PS: PORTB.5 = 1 , wenn der Port ein Eingang ist, schaltet den Pullup Widerstand ein, 0 wieder aus.

Gruß
Searcher

Kugelblitz
25.02.2012, 08:43
Hallo Searcher,

ja, ich weiss spääääät melde ich mich, habe seit unserem letzten Kontakt das "Projekt" zur Seite gelegt und erst
vor einpaar Tagen nocheinmal hingeschaut.
Hier also meine Rückmeldung, es geeeeht, genau wie du gesagt hast
CONFIG PORTB.5 = OUTPUT
Portc.5 = 0 ' schalten die Kontrastleitung gegen Masse, ich kann was sehen auf dem LCD
Portc.5 = 1 ' schalten die Kontrastleitung auf high, ich kann nix sehen auf dem LCD


danke, danke...
Gruß Kugelblitz

Searcher
25.02.2012, 10:57
... es geeeeht ...
:-) Prima und ich freu mich über die Rückmeldung!

Gruß
Searcher