Archiv verlassen und diese Seite im Standarddesign anzeigen : Pproblem mit Schalter und Displayansteuerung
Hi,
ich will einen Atmega an ein Display und 2 schaltern anschließen.
Wenn beide Schalter an sind gibt der atmega einen Text übers Display aus.Programmiersprache ist Bascom.
Hardwaretechnisch ist alles fertig, aber ich hab keine Ahnung wie ich die beiden Taster ansteuern soll.
ich bräuchte für die roten Unterstriche einen Befehl beide Taster zu verknüpfen:
If Portb.4__Portb.3 = 0 Then
Cls
Locate 1 , 1
Lcd "Test"
End If
Außerdem hab ich als Display ein LCD 161A von Reichelt mit 1x16 Zeichen.
Ich steuere es wie im RN-Wiki beschrieben an, es kann aber nur 8 Zeichen anzeigen.
Hier der Code:
Config Lcd = 16 * 1
Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4
Config Lcdbus = 4
Hoffe ihr könnt mir helfen.
Sauerbruch
11.02.2009, 19:13
Moin,
klar können wir helfen O:)
Zum Thema Display: Manche 16-stelligen Displays sind in Wahrheit 2*8-stellig, d.h. man muss so tun, als ob alles ab der 9. Stelle in die "zweite Zeile" geschrieben wird. Bascom erledigt das ganz automatisch, wenn Du
Config LCD = 16*1a
schreibst. Probier´s mal aus - wahrscheinlich geht´s dann.
Vorher solltest Du Dir aber nochmal in´s Gedächtnis rufen, dass man
Eingänge mit PINX.Y abfragt! Die Zeile mit den roten Strichen muss also heißen
If Pinb.4__Pinb.3 = 0 Then
Und mit welchem Befehl man die beiden Bedingungen verknüpfen kann, das findest Du in der Bascom-Hilfe an folgender Stelle:
Kapitel: Bascom Language fundamentals
Unterkapitel: Language Fundamentals
Überschrift: Logical Operators
Gutes Gelingen - und viel Spaß beim Stöbern in der Bascom-Hilfe! Kaum wo anders kann man soooo viel lernen!!
Daniel
Bauteiltöter
11.02.2009, 19:14
du musst PINX.x schreiben!
Und zum verknüpfen musst du schreiben
If PINB.4=PINB.3 then 'gleich
oder
If PINB.4<PINB.3 then 'PINB.4 kleiner
oder
If PINB.4>PINB.3 then 'PINB.4 größer
Zum LCD: Versuch mal
Config Lcd =8*2
Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4
Config Lcdbus = 4
Dann must du für die letzten acht zeichen in die 2te Zeile springen ;)
MfG
So hab jetzt einen neuen code. das display zeigt nur schwarze Balken und manchmal Wortfetzen. mit der hardware stimmt alles.
Der Code
'Pinb.4= Anschalter ( Immer auf 0 )
'Pinb.3= handbetriebsschalter
'Pinb.2= testschalter
'Pinb.1= Automatikschalter
$regfile = "m8def.dat"
$crystal = 1000000
Config Lcd = 16 * 1a
Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4
Config Lcdbus = 4
Config Pinb.1 = Input
Config Pinb.2 = Input
Config Pinb.3 = Input
Config Pinb.4 = Input
Portb.1 = 1
Portb.2 = 1
Portb.3 = 1
Portb.4 = 1
If Pinb.4 = 0 Then
Cls
Locate 1 , 1
Lcd "Power on"
End If
If Pinb.4 = Pinb.2 Then
Cls
Locate 1 , 1
Lcd "Test"
End If
If Pinb.4 = Pinb.3 Then
Cls
Locate 1 , 1
Lcd "Handbetrieb"
End If
If Pinb.4 = Pinb.1 Then
Cls
Locate 1 , 1
Lcd "Automatik"
End If
Ist das dein vollständiges Programm?
Wenn ja, dann fehlt da auf jeden Fall noch eine Do-Loop-Schleife.
So dem Problem mit den Balken:
Füge mal nach dem
Config Lcd = 16 * 1a
Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4
Config Lcdbus = 4
noch ein initLCD ein. Dann kann schon mal helfen.
Des Weiteren; verwendest du wirklich einen 1MHz Quarz? Ist diese Einstellung falsch, kann es auch zu Fhelern kommen.
Mehr fällt mir gerade nicht ein.
Trotzdem will ich noch etwas allgemeines los werden: Es macht Sinn, dem Programm auch oprisch eine Struktur zu verpassen. Dann ist es deutlich leichter zu lesen.
Ein Vorschlag von mir (samt oben genannten Verbesserungsvorschlägen, Kommentierungen wird BASCOM dir automatisch nach rechts rücken):
$regfile = "m8def.dat"
$crystal = 1000000 '1MHz Quarz
Config Lcd = 16 * 1a
Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4
Config Lcdbus = 4
InitLCD
Config Pinb.1 = Input 'Pinb.1= Automatikschalter
Portb.1 = 1 'Pull-Up an
Config Pinb.2 = Input 'Pinb.3= handbetriebsschalter
Portb.2 = 1 'Pull-Up an
Config Pinb.3 = Input 'Pinb.2= testschalter
Portb.3 = 1 'Pull-Up an
Config Pinb.4 = Input 'Pinb.4= Anschalter ( Immer auf 0 )
Portb.4 = 1 'Pull-Up an
'---Start_Main-Program---
Do
If Pinb.4 = 0 Then
Cls
Locate 1 , 1
Lcd "Power on"
End If
If Pinb.4 = Pinb.2 Then
Cls
Locate 1 , 1
Lcd "Test"
End If
If Pinb.4 = Pinb.3 Then
Cls
Locate 1 , 1
Lcd "Handbetrieb"
End If
If Pinb.4 = Pinb.1 Then
Cls
Locate 1 , 1
Lcd "Automatik"
End if
Loop
'---End_Main-Program---
End
Viele Grüße,
jon
@ john: Danke jetzt funktionierts.
@ all:Find ich echt super, dass man in diesem forum präzise, schnelle und hilfreiche Antworten bekommt. Schade dass das Forum wegen meinem langsamen Internet so lange zum Laden braucht.
Das langsame Laden liegt nur bedingt an deinem Netz-Anschluss.
Der Server ist momentan etwas überbelastet. Dies wird sich aber in absehbarer Zeit durch einen Umzug und der Verwendung eines anderen Systems ändern.
Wird aber leider noch etwas dauern...
jon
Hi,
es geht doch ned. Das Display flackert wild zwischen automatik und Power on. an den Eingangspins für die Schalter sind 4,7 V Spannung (normal? ). Werde die nächsten tage noch einen Schaltplan hochladen. Wie kann man übrigens die Fusbits für den Atmega 8 in Ponyprog so verändern, dass man einen externen Quarz dranhängen kann ( hatte es mal aufgeschrieben, finds aber nirgendwo. ) ? In dem Gehäuse, in dem die Displayansteuerung und das Display verbaut sind, hat ungefähr 50 Kabel( Durchmesser 1,5mm) durch die 12V von einem Bleiakku fließen. Kann es sein, dass in dem Gehäuse solch ein Elektromagnetisches Chaos herrscht, dass der Atmega nicht richtig arbeitet?
mfg,
Florian
Hi,
hab grad nochmal nur die Displayansteuerung + Display mit strom versorgt, die Schalter alle abgesteckt und..... er zeigt ohne eingang von Signalen immer diesen schnellen wechsel an. K.a. warum. Mit Hello world geht das Display, an dem liegts ned.
Mfg,
Flo
Ich kann es gerade nicht testen, würde aber mal tippen, dass die logische Verknüpfung mit dem if pinx.y = pinx.y nicht stimmt, was zu der blöden Anzeige führt.
Versuch das mal nach diesem Prinzip:
If Pinb.4 = 0 AND Pinb.2 = 0 Then
Theoretisch müsste das klappen.
jon
Sauerbruch
12.02.2009, 21:43
wenn ich das richtig verstanden habe, liegt an PINB.4 der "An"-Schalter, der den Eingang immer auf 0 legt.
Damit ist die Bedingung "If PINB.4 = 0" immer gegeben, d.h. er schreibt immer als erstes in der Do-Loop-Schleife "Power On", und dann als zweites z.B. "Automatik". Und dann fängt er wieder von vorne an. Und das führt zum "Flackern" zwischen den beiden Anzeigen.
Ich würde das z.B. so machen:
Do
CLS
Locate 1,1
If Pinb.4 = 0 then
If Pinb.2 = 0 then
LCD "Test"
End if
If Pinb.3 = 0 then
LCD "Handbetrieb"
End if
If Pinb.1 = 0 then
LCD "Automatik"
End if
Else
LCD "Power On"
End if
Loop
Wahrscheinlich musst Du vor das CLS noch ein paar wait-Millisekunden (z.B. 100) tun - sonst flackert´s nämlich auch ziemlich, weil das Programm ein paar hundert mal pro Sekunde den "CLS"-Befehl abarbeitet.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.