-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Pproblem mit Schalter und Displayansteuerung

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    08.10.2008
    Alter
    25
    Beiträge
    44

    Pproblem mit Schalter und Displayansteuerung

    Anzeige

    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.

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Moin,

    klar können wir helfen

    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
    Code:
    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
    Code:
    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

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    21.06.2008
    Beiträge
    113
    du musst PINX.x schreiben!

    Und zum verknüpfen musst du schreiben
    Code:
    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
    Code:
    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

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    08.10.2008
    Alter
    25
    Beiträge
    44
    So hab jetzt einen neuen code. das display zeigt nur schwarze Balken und manchmal Wortfetzen. mit der hardware stimmt alles.

    Der Code
    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

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    26
    Beiträge
    3.467
    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
    Code:
    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):
    Code:
    $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
    Nice to be back after two years
    www.roboterfreak.de

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    08.10.2008
    Alter
    25
    Beiträge
    44
    @ 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.

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    26
    Beiträge
    3.467
    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
    Nice to be back after two years
    www.roboterfreak.de

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    08.10.2008
    Alter
    25
    Beiträge
    44
    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

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    08.10.2008
    Alter
    25
    Beiträge
    44
    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

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    26
    Beiträge
    3.467
    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:
    Code:
    If Pinb.4 = 0 AND Pinb.2 = 0 Then
    Theoretisch müsste das klappen.

    jon
    Nice to be back after two years
    www.roboterfreak.de

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •