-
        

Ergebnis 1 bis 6 von 6

Thema: Zu ansteuerung ausgabe auf LCD

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    25.06.2007
    Beiträge
    14

    Zu ansteuerung ausgabe auf LCD

    Anzeige

    So, nachdem ich nun ewig gesucht hab und nichts gefunden, hier meine Frage:

    Hab an meinen Atmega8535 ein lcd-Display angeschlossen, welches auch einwandfrei funktioniert. Ich kann ausgaben auf dem Display machen.

    Was auch einwandfrei funktioniert ist das Ansteuern eines Ausgangs nach betätigen eines Tasters der auf einem Eingang liegt. (Hinter dem Ausgang sitzt eine Schaltstufe für ein Relais).

    Will ich nun aber beides zugleich machen, sprich ich betätige den Taster und als effect darauf soll der Ausgang geschalten werden, sowie eine Ausgabe auf dem LCD erscheinen, hängt sich der Ausgang auf und geht nicht wieder in ruhe sobald ich den Taster loslasse.

    Ich stellte fest dass das Programm so lange funktioniert, bis die erste anweisung an das Display geschieht. Sprich wie unten zu sehen der Cls Befehl. Lass ich ihn weg hängt sich der Ausgang nicht auf.

    Hier der Code:

    Code:
    $regfile = "m8535.dat"                                      'ATMega8535
    $crystal = 8000000
    
    Config Lcd = 16 * 1a
    Config Lcdpin = Pin , Db4 = Portd.3 , Db5 = Portd.4 , Db6 = Portd.5 , Db7 = Portd.6 , E = Portd.2 , Rs = Portd.1
    Config Lcdbus = 4
    
    
    Config Pinc.0 = Output
    Config Pinc.1 = Input
    Portc.1 = 1
    
    Do
    Cls
    If Pinc.1 = 1 Then
    Portc.0 = 0
    Else
    Portc.0 = 1
    End If
    Loop
    Wie kann ich zu Steuerbefehlen Ausgaben auf dem LCD machen?

    Ich danke schonmal...

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    09.05.2007
    Beiträge
    202
    Hallo,

    hast du schon mal versucht, die Schleife etwas langsamer zu machen? Versuche doch mal ein "Waitms 100" nach dem "Do" einzubauen. Ansonsten sollte es eigentlich funktionieren.
    Gruß, Stefan

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.05.2007
    Beiträge
    329
    Hallo TheNetwalker,

    das CLS ist das Problem.

    Bei 8MHz dauert ein Takt 125ns. Deine Schleife dauert 2 Takte, macht 250ns. Laut Datenblatt eines LCD-Displays, das ich gerade neben mir liegen habe, dauert ein CLS ca. 1640ns. Daraus folgt, daß du den Displaytreiber in der Zeit in der er voll im Stress ist noch 6,56mal mit CLS-Befehlen befeuerst.

    1. Wenn der Prozessor nichts weiteres zu tun hat, würde ich grundsätzlich langsamer Takten.

    2. Den cls-Befehl in einer Schleife einzusetzen ist auch nicht optimal. Besser wäre es den alten Wert zu überschreiben (das geht auch schneller)

    3. Wenn cls, dann Gedenkpause einlegen

    Günter

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    25.06.2007
    Beiträge
    14
    Ja, das klingt alles sehr logisch und funktioniert auch Ich sag mal "danke" =D>

    ach, wenn ich den Takt des Controllers runterschrauben möchte, reicht dann lediglich eine niedrigere angeabe im Quellcode oder muss ich auch den passenden Quarz dran haben?

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.05.2007
    Beiträge
    329
    Hallo,

    Quarz muß schon sein!

    Das verringert aber den CO² Ausstoß der Schaltung beträchtlich

    z.B.

    ATMega8

    bei 100kHz = 0,4 mA
    bei 16MHz = 20mA

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Das verringert aber den CO² Ausstoß der Schaltung beträchtlich
    bei 100kHz = 0,4 mA
    bei 16MHz = 20mA
    Bei allem Engagement für dieses wichtige Thema (CO2) sollte man aber die Größenordnungen nicht aus dem Auge verlieren: Eine etwa gleich große Menge an CO2 kann man dadurch wieder einsparen, dass man jede Stunde einen einzigen Atemzug ausfallen lässt


    @TheNetwalker:
    Viel wichtiger für Deine Frage nach niedrigen Taktfrequenzen ist die Tatsache, dass die Angabe im Quellcode ($Crystal = ...) nicht bestimmt, mit welcher Frequenz der Controller getaktet wird! Das kannst Du nur in den Fusebits einstellen (ebenso wie die Taktquelle). $Crystal sagt´s nur dem Programm, damit zeitabhängige Befehle (wie z.B. waitms) in der richtigen Geschwindigkeit laufen. Das geht natürlich gründlich schief, wenn die $Crystal-Angabe nicht der tatsächlichen Taktfrequenz entspricht!

    Und ob ein Quarz nötig ist oder nicht, hängt einzig und alleine davon ab, ob Deine Anwendung auf exakte Zeitfunktionen angewiesen ist. Die eingebauten RC-Oszillatoren sind inzwischen aber auch schon sehr frequenzstabil.

Berechtigungen

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