watterott ;title =
Seite 2 von 5 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 41

Thema: Atmega8 mit LCD 1602A nur Hieroglyphen

  1. #11
    Kabelträger
    Registriert seit
    29.12.2016
    Alter
    67
    Beiträge
    17
    Da wird es aber schon schwierig. Müssen da nicht auch die Fuses verstellt werden? Z.Z. sind diese eingestelt bei SUT-Clock: "Int. RC Osc. 1 MHz; Start-up time: 6 CK + 64 ms;default value" wäre die folgende richtig?"Int. RC Osc. 8 MHz; Start-up time: 6 CK + 64 ms"

  2. #12
    Administrator Avatar von DON
    Registriert seit
    19.11.2016
    Ort
    Herford
    Beiträge
    366
    Der INT0 ist das Problem.
    Ein Mensch mag noch so herausragende Fähigkeiten haben – wenn er arrogant und selbstsüchtig ist, sind sie nichts wert.
    Konfuzius


  3. #13
    Kabelträger
    Registriert seit
    05.11.2016
    Beiträge
    3
    Hallo Arto

    hab ja nicht so viele Ahnung, aber probiere mal dies am Anfang:



    '$sim

    $regfile = "m8def.dat"
    $crystal = 1000000
    ' ist hier auch die richtige Frequenz eingestellt? Wurde oben schon erwähnt

    $hwstack= 32
    $swstack= 32
    $framesize= 64


    Config Portd = Output
    Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2 'Ausgänge LCD-Modul
    Config Lcd = 16 * 2
    Initlcd 'siehe dazu auch die Hilfe. Ich verwende dies eigentlich immer ...
    Cursor Off
    Cls

    'Config Pind.4 = Input ' Zählimpuls von Stromzähler Eingang S0-Bus
    'wo kommt denn nun dein Zählimpuls her? Von Pind.4? Dieser ist doch oben mit Db4 = Portd.4 als Ausgang geschaltet für das Display......



    Poste doch bitte dein endgültiges File, welches wirklich als letztes verwendet wird noch einmal....


    LG Kalle

  4. #14
    Kabelträger
    Registriert seit
    29.12.2016
    Alter
    67
    Beiträge
    17
    Wen es der Int0 ist, wie Krieg ich da die Kuh vom Eis. Den Interrupt brauch ich. Habe aber auch schon ein enfaches "Hello World" aus dem Netz probiert, aber auch da das gleiche Bild.

  5. #15
    Administrator Avatar von DON
    Registriert seit
    19.11.2016
    Ort
    Herford
    Beiträge
    366
    Rs = Portd.2 den pin ändern
    Ein Mensch mag noch so herausragende Fähigkeiten haben – wenn er arrogant und selbstsüchtig ist, sind sie nichts wert.
    Konfuzius


  6. #16
    Kabelträger
    Registriert seit
    29.12.2016
    Alter
    67
    Beiträge
    17
    Hallo kalle,
    habe Deine Änderungen eingefügt, jedoch ohne Erfolg. Den PD4/DB4 habe ich der Einfachheit mit LCD belegt. Wenn dann die Anzeige funktioniert, z.Z. noch ohne S0-Taktung, dann wird der Port D4 für den ext. Interrupt frei gemacht und DB4 kommt vermutl dann an PB1 o. 2
    Hallo Don,
    habe jetzt RS = Pord.1, aber es bleibt dabei.

    Hier noch einmal das aktuelle Listing:
    ' BASCOM-Programm
    ' Stefan Hoffmann 2009
    ' LCD Basis; als Grundgerüst
    ' LCD an PortD
    ' LCD zählt nach zwei Timer0 überläufen durch Interrupt0 weiter, Überlauf wird durch S0 Impuls vom Stromzähler. ausgelöst
    ' In: -
    ' Port D4 externer Interrupt als Eingang
    ' Zählen mit Iterrups, Stromzählung

    $regfile = "m8def.dat"
    $crystal = 1000000
    '$sim ' für schnellere Simulation eingefügt
    $hwstack = 36
    $swstack = 36
    $framesize = 64

    'Config Pind.4 = Input ' Zählimpuls von Stromzähler Eingang S0-Bus
    Config Portd = Output
    Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.1 'Ausgänge LCD-Modul
    Config Lcd = 16 * 2
    Initlcd
    Cursor Off
    Cls

    Waitms 1000

    Dim Watt As Single ' Laufvariable fuer Schleife
    Dim Kw As Single

    Const Presetvalue = 2 ' 2 mal Timer0 Überlauf

    Config Timer0 = Counter , Edge = Rising ' Timer0 steigende Flanke
    Enable Timer0 ' Timer0 ein

    Config Int0 = Rising ' steigende Flanke
    Enable Int0 ' INT0 einschalten
    Enable Interrupts ' Interrupts global einschalten. Das ist der Hauptschalter für alle Interrupts

    Cls
    Cursor Off

    Locate 1 , 1
    Lcd "Einspeisung 230V" ' Anzeige LCD
    Waitms 3000

    Locate 2 , 11
    Lcd "KWh"
    Waitms 1000

    Do ' Haptschleife; wartet auf Impuls vom Stromzähler
    'NOP ' bei Impuls Sprung On_timer0
    On Int0 On_int0
    If Timer0 = 0 Then Gosub On_int0 ' Wenn der Interrupt INT0 auftritt,dann springe zum Label "On_int0"
    Loop ' nach zwei Timerüberläufen

    On_int0:
    Locate 2 , 4 ' zum Test für Word in Zeile 22 von 13 auf 12 geänder
    Incr Watt ' Aufwärts Zählen
    Kw = Watt / 1000 ' Umwandlung KW in Watt; dritte Kommastelle
    Lcd Fusing(kw , "#.###") ' Umwandlung String in Frame; Nachkommastellen abschneiden
    Load Timer0 , Presetvalue ' Mit dem Befehl LOAD wird der Wert des Timer0 gesetzt, hier 2 Impulse
    Waitms 1000
    Return

    Do
    'Nop
    On Timer0 On_timer0
    Loop

    On_timer0:
    Incr Timer0
    Waitms 500 'Sprung zurück in Hauptschleife und warten auf nächsten Impuls
    Return

    End

  7. #17
    Neuer Benutzer
    Registriert seit
    02.11.2016
    Beiträge
    47
    Hallo,

    Config Lcd = 16 * 2 'dies ist die Kennung für Lib Lcdpin
    Cursor Off Noblink 'Aus und nicht blinken

    Lcdinit ‚sehe ich nicht

    Wenn so ein Mist dann eigentlich nur falscher Takt aber häufiger Datenleitung.
    Bist du dir sicher das die 4 Datenleitung nicht vertauscht sind. D4 an LCD Pin 11.

    Gruß

  8. #18
    Neuer Benutzer
    Registriert seit
    02.11.2016
    Beiträge
    47
    Zitat Zitat von arto Beitrag anzeigen
    Wen es der Int0 ist, wie Krieg ich da die Kuh vom Eis. Den Interrupt brauch ich. Habe aber auch schon ein enfaches "Hello World" aus dem Netz probiert, aber auch da das gleiche Bild.
    Wenn RS und oder E falsch dann keine Zeichen.
    Lass mal die Spielerei mit Intrrups völlig weg(ist ja wirklich Wüst)

    Nun mach ich Feierabend

  9. #19
    Kabelträger
    Registriert seit
    24.11.2016
    Beiträge
    6
    Hallo arto,
    witzig, sowas hab ich auch gerade im werden, allerdings deutlich aufwendiger (mit Tarifauswahl und Anpassung an €/kWh, Strom auf Zeit, Anzeige Restzeit, Rest-kWh,...) usw. Basis ist bei mir ein Atemga128 und ein Touchscreen.

    nun zu Deinem Programm: mit Interrupts mußt Du Dich nochmal auseinandersetzen, das ist ziemlich durcheinander, was Du da versuchst. Und Dein Config Timer0 schaltet das Bit D.4 um und damit Dein LCD aus...
    Vorschlag: mach erstmal alles ohne Interrupt und Counter usw. dann taste Dich langsam ran und lerne dabei, was man alles falsch machen kan ;-) Aus eigener Erfahrung ist das ziemlich viel...

    Ein paar Tipps, damit Du nicht alle Fehler nachmachst:


    • Ansteuerung des LCD entweder nur in der Hauptschleife oder nur im Interrupt. gemischt ist bäh.
    • Fließkommaberechnung im Interrupt ist auch Fehlerquelle (Dann muß im Interrupt SAVEALL stehen)


    Gruß, Christian

  10. #20
    Kabelträger Avatar von daja
    Registriert seit
    15.11.2016
    Ort
    Lauta
    Alter
    52
    Beiträge
    23
    Welche Bascom Version hast du ? Setze mal den Portd die Pin einzeln und d.4 geht entweder LCD oder Eingang . Wie kommst du in 2. Do-Loop schleife ?
    Geändert von daja (09.01.2017 um 09:21 Uhr)

Lesezeichen

Lesezeichen

Berechtigungen

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