Forum: Mikrocontroller und Digitale Elektronik Hintergrundbeleuchtung per uC schalten - Programm hängt


von Uwe H. (uwe1981)


Lesenswert?

Hallo :-)
Ich hab diesmal ein kleines, technisches Problem. Ich wollte meine 
Hintergrundbeleuchtung per uC steuern. Problem liegt darin, dass sich 
dabei das Programm aufhängt, bzw. garnicht erst startet. Optisch sieht 
das so aus, dass wenn ich den Controller einschalte das Display dunkel 
bleibt und irgendso ein komisches, unbeschreibliches Zeichen erscheint. 
Dann passiert erstmal nix und nach ca. einer Minute startet das Programm 
plötzlich oder auch nicht. Drücke ich die RESET-Taste am uC, dann 
startet das Programm normal, egal, wie oft ich den RESET wiederhole. 
Also passt ihm irgendwas am Anfang nicht. Hier der Programmausschnitt 
von der Startfrequenz:



$regfile = "m32def.dat"
$crystal = 16000000

$swstack = 50
$hwstack = 50
$framesize = 50


Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , _
   Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2


Config Lcd = 16 * 4

Config Porta = &B11110000
Config Portb = &B11111111
Config Portc = &B11111111
Config Portd = &B11111111

Set Portd.7             '<<-- Backlight on
Cls
Cursor Off



Technisch sieht das Ganze so aus. dass PortD.7 einen NPN-Transi 
ansteuert, von dem ich keine näheren Daten habe, weil er als SMD auf 
meiner Evo-Platine verbaut ist und in der Doku nichts näheres zu finden 
ist.

Hat einer hier schonmal so ein Problem gehabt oder weiß eventuell, was 
das sein könnte?

von holger (Gast)


Lesenswert?

>Hat einer hier schonmal so ein Problem gehabt oder weiß eventuell, was
>das sein könnte?

Hat dein Backlight einen Vorwiderstand? Und aktiviere
mal die BODEN und BODLEVEL Fuses.

von Uwe H. (uwe1981)


Lesenswert?

Ja, auf der LCD-Platine sind Vorwiderstände.
Was bewirken die Fuses?

Grüße

von xtr116 (Gast)


Lesenswert?

Dein Programm hat zumindest kein Ende.
Bau bitte so ein

do
   !nop
loop
end

Konstrukt ein, so dass der Programmcounter nicht irgendwann überläuft 
und von vorn beginnt.


gruß XTR

von Rätsler (Gast)


Lesenswert?

Auf Grund der in deinem Programmcode auftauchenden Buchstabenkombination 
"LCD" vermute ich, das du von einem LCD-Display sprichst. Bist du 
sicher, das der Controller vom Display schon mit seiner Initialisierung 
fertig ist, wenn du das Cls-Kommando schickst?

von Jonathan S. (joni-st) Benutzerseite


Lesenswert?

Ähm... Du initilisierst dein Display gar nicht. Außerdem setzt du die 
Busbreite nicht. Hinter "Config LCD = 16 * 4" gehört noch ein "Config 
LCDBus = 4", um dem Compiler zu sagen, dass du dein Display im 
4-Bit-Modus ansprichst. Vor das "Cls" und "Cursor off" gehört noch ein 
"Initlcd", um das LCD erstmal zu initialisieren... Und wie bereits 
gesagt, läuft dein Controller ohne Hauptschleife amok.


Gruß
Jonathan

von Uwe H. (uwe1981)


Lesenswert?

Jonathan Strobl schrieb:
> Ähm... Du initilisierst dein Display gar nicht. Außerdem setzt du die
> Busbreite nicht. Hinter "Config LCD = 16 * 4" gehört noch ein "Config
> LCDBus = 4", um dem Compiler zu sagen, dass du dein Display im
> 4-Bit-Modus ansprichst. Vor das "Cls" und "Cursor off" gehört noch ein
> "Initlcd", um das LCD erstmal zu initialisieren... Und wie bereits
> gesagt, läuft dein Controller ohne Hauptschleife amok.
>
>
> Gruß
> Jonathan

Ich habe nur den Anfang des Programmes kopiert. Natürlich hat das 
Programm ne Schleife. Er hängt sich ja beim Start auf und läuft erst 
garnicht in die Schleife. Das Init Lcd habe ich noch nicht probiert, 
werd ich mal machen. Normalerweise ist es nicht nötig, da Bascom 
automatisch initialisiert, wenn das LCD dem HD44780-Standard entspricht.


> Auf Grund der in deinem Programmcode auftauchenden Buchstabenkombination
> "LCD" vermute ich, das du von einem LCD-Display sprichst. Bist du
> sicher, das der Controller vom Display schon mit seiner Initialisierung
> fertig ist, wenn du das Cls-Kommando schickst?

Ja, bin ich. Wenn ich die LCD-Beleuchtung an VCC hänge, startet alles 
wie geplant und ohne Probleme. Der Mist passiert nur, wenn die Steuerung 
der Beleuchtung per PORT erfolgt. Daraus schliesse ich, dass es damit 
zusammenhängt. Beim Starten pulsen doch die PORTS immer die erste 
Sekunde, vielleicht stört das die Initialisierung vom Display? Obwohl 
die Beleuchtung eigentlich unabhängig vom Displaycontroller laufen 
sollte... Keine Ahnung

von Ben _. (burning_silicon)


Lesenswert?

Schaltplan her. Vielleicht hast Du irgendwo einen Kurzschluß fabriziert.

Ich hab das schon gebaut, daß der µC die Hintergrundbeleuchtung dimmern 
konnte... ohne Probleme.

von Uwe H. (uwe1981)


Angehängte Dateien:

Lesenswert?

Ben _ schrieb:
> Schaltplan her. Vielleicht hast Du irgendwo einen Kurzschluß fabriziert.
>
> Ich hab das schon gebaut, daß der µC die Hintergrundbeleuchtung dimmern
> konnte... ohne Probleme.

Nen Kurzen hab ich nicht fabriziert, dann würd das anders aussehen. 
Außerdem benutze ich ein Evo_Board von And-Tech.pl für solche Tests, da 
kann man praktisch nur was kaputtmachen, wenn mans drauf anlegt. Anbei 
der Schaltplan vom Board. Oben links ist das Display mit der 
Transistorschaltung. Im Schaltplan steht LCD 16 * 2, ist aber 16 * 4. 
Das Problem ist einfach das bescheuerte Flimmern, wenn der Prozessor 
"bootet". So wie ich gesagt hab, wenn ich den Backlight-Transistor 
normal an VCC klemme, dann klappt alles wunderbar. Nur am Pin spinnt das 
Teil.

von Ben _. (burning_silicon)


Lesenswert?

Wie groß ist denn der Basiswiderstand?

Evtl. bricht Dir die Spannung beim Einschalten des Lichts kurz weg. Pack 
doch mal testweise einen low-ESR-Elko in der nähe des Transistors 
zwischen +LED und GND.

Bei mir war's kein Testboard, sondern ein kompletter Eigenbau der das 
konnte.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.