- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 8 von 8

Thema: LCD-Fehler?

  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.03.2004
    Ort
    Bielefeld (JA, das gibt es!)
    Alter
    36
    Beiträge
    1.614

    LCD-Fehler?

    Anzeige

    Praxistest und DIY Projekte
    Hi Leutz,

    ich hab da mal son Problem ich hab nen Display 16*2.

    Nun hab ich mal erst was mit Timern ausprobiert und dann zeigt das Display auf einmal nur noch "?" an.

    Quelltext:
    Code:
    $regfile = "m128def.dat"
    $crystal = 4000000
     
    Dim Millisekunden As Long
    Dim K As Long
     
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , E = Portc.2 , Rs = Portc.0 , Db7 = Portc.7 , Db6 = Portc.6 , Db5 = Portc.5 , Db4 = Portc.4       'Belegung am MEGA8
    Config Lcdbus = 4                                           '4-Bit Bus
    Config Lcdmode = Port
     
    Config Portc = Output
     
    Portc.1 = 0
     
    Cls
    Const Reload = 192
    Config Timer0 = Timer , Prescale = 64
     
    On Timer0 Timer0_isr
    Enable Interrupts
    Enable Timer0
     
    Do
    Locate 1 , 1
    Lcd Millisekunden
    Print Millisekunden
    Loop
     
    
    Timer0_isr:
    Load Timer0 , Reload
    Incr Millisekunden
    Return
    Denn postet mal alle fröhlich

    Martin
    Ich will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds, Entwickler von Linux

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    15.10.2004
    Ort
    Pfalz
    Beiträge
    83
    Hallo x-ryder,

    ich programmiere fast nur in Assembler, daher kommt mir Dein Quelltext etwas "einfach" vor. Vielleicht führt Dein Compiler folgendes ja von alleine durch:
    1) Du arbeiterst mit Timer0 und nutzt dessen Interrupt bei Überlauf. Das bedeutet, Du mußt eine Einsprungmarke für die ISR setzen - ich sehe da nur die ISR mit Marke als solche, aber irqs haben auf dem µC feste physikalische Einsprungadressen
    2) Du scheinst einen Auto-Reload-Modus fahren zu wollen - Ich vermisse die Moduseinstellung

    Mehr fällt mir vorerst nicht ein - wie schon gesagt, es kann sein, daß man auf diese Kleinigkeiten nur im Asseembler achten muß.

    Viel Erfolg noch

    Ciao

    Patrick
    HAVE A NICE DAY

  3. #3
    Gast
    Hallo Ciao,
    x-ryder hat netterweise für mich diese Fragestellugn oben angeführt. Mit der Einsprungadresse könntest du recht haben. Ich denke das das Programm nicht an der korrekten Adresse im Speicher beginnt.
    Wie kann ich die Anfangsadresse deklarieren bzw initialisieren ?

    Danke

    Martin

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.11.2004
    Ort
    Erlenbach
    Beiträge
    126
    Hallo x-ryder,

    ich werde Dein Programm morgen mal auf mein Testboard legen und mal schaun was sich machen lässt.
    Aber soviel vorab:
    - Ich nehme an Du Programmierst so wie ich mit BASCOM. Bascom deklariert die Interrupteinsprungsadresse beim Kompilieren automatisch, d.h. Du brauchst Dich darum nicht zu kümmern.
    - Ich vermisse eine Zuweisung an die Variable "Millisekunden". In der Interruptroutine inkrementierts Du die Variable. Wo ist aber der Startwert. Irgendwo vor dem "Do" müsste zumindest stehen: Millisekunden = 0.

    Alles weitere, denke ich, müsste funktionieren. Ich habe kürzlich ein ahnliches Prüfprogramm für einen ATmega16 geschrieben. Und das hat wunderbar funktioniert. Allerdings habe ich mein Display über die Compiler-Optionen eingestellt und nicht im Programm integriert.
    Ich kann im Moment auch mit der Zeile "Config Lcdmode = Port" nichts anfangen, weil Du das Display im Pin-Mode betreibst. Ich werde das aber morgen testen und Dir hier posten.

    Viele Grüße
    Michael

  5. #5
    Gast

    LCD

    Hallo x-ryder,

    ich habe Dein Programm auf mein Testboard geladen. Allerdings habe ich die Zeile mit dem Config LCDpin angepasst, weil mein Display auf PortB liegt.

    Dein Programm funktioniert bei mir, obwohl die Variable Millisekunden nicht definiert vorbelegt ist. Ich würde Variablen immer vorbelegen, damit nicht irgendwann doch noch Schrott drinsteht.

    Das mit dem "LCDmode = Port" habe ich nachgelesen in der Bascom Hilfe, das ist richtig (man lernt nie aus)

    Hat das Display bei Dir am Port C schon funktioniert und ist der Fehler erst jetzt aufgetreten?
    Wenn ja:
    - Display evtl. defekt?
    - Leitung zum Display unterbrochen?
    Wenn nein:
    - Leitungen zum Display richtig angeschlossen?
    - Der ATmega128 kann lt. Datenblatt den Port C nur dann als Output verwenden wenn er im Kompatibilitätsmode läuft (wenn ich das Datenblatt richtig verstehe). Ist der Kompatibilitätsmode abgeschaltet, hat Port C eine andere Funktion. Ist der Chip noch im Kompatibilitätsmode?

    Ich habe leider keinen ATmega128 und habe es auf einem ATmega16 probiert. Sonst könnte ich Dir evtl. genaueres posten.
    Ich hoffe Du hast wenigstens ein paar Denkanstösse bekommen.

    Viele Grüße
    Michael

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.11.2004
    Ort
    Erlenbach
    Beiträge
    126

    LCD

    Verdammter Login,

    die letzte Antwort habe ich natürlich geschrieben.
    Wieso fliegt man eigentlich immer raus wenn man eine Antwort erstellt?
    Schreibe ich zu langsam?

    Viele Grüße
    Michael

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.06.2004
    Ort
    Bad Schussenried in Oberschwaben
    Alter
    34
    Beiträge
    1.461
    Hi x-ryder!

    Probier's mal mit lcd str(millisekunden).
    ich weis jetzt nicht genau, was das Problem ist, aber so eine LCD-Anwendung (lcd "Hallo") verbraucht schon so siene Zeit.

    Hat das Display einen R/W Eingang? -> LOW = SCHREIBEN

    Überprüf' mal deine Kabel.

    Du hast geschrieben:

    Zitat Zitat von x-ryder
    Config Lcdpin = Pin , E = Portc.2 , Rs = Portc.0 , Db7 = Portc.7 , Db6 = Portc.6 , Db5 = Portc.5 , Db4 = Portc.4 'Belegung am MEGA8
    aber
    Zitat Zitat von x-ryder
    $regfile = "m128def.dat"
    Wenn es ein MEGA8 ist, müsstest du schreiben:

    $regfile = "m8def.dat"

    Was macht das Hexapod

    Viele liebe Grüße,
    Tobi
    http://www.tobias-schlegel.de
    "An AVR can solve (almost) every problem" - ts

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    01.03.2004
    Ort
    Bielefeld (JA, das gibt es!)
    Alter
    36
    Beiträge
    1.614
    also

    1. VIELEN DANK @ all die geschrieben haben und ich habs wieder hinbekommen es hing mit einem anderen programmteil zusammen die sich irgendwie nicht miteinander vereinbaren konnten wer jetzt welchen teil des speichers belegen darf.

    2. beim hexapod läuft im moment zwar wenig aber es läuft, ich bin dabei ne spracherkennung zu installieren (voice direct 364 von www.sensoryinc.com)

    Martin
    Ich will Microsoft wirklich nicht zerstören. Das wird nur ein gänzlich unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds, Entwickler von Linux

Berechtigungen

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

12V Akku bauen