-         
Seite 1 von 18 12311 ... LetzteLetzte
Ergebnis 1 bis 10 von 173

Thema: Portbelegung auf ATMega für LCD1602

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.09.2008
    Ort
    Linz A
    Beiträge
    122

    Portbelegung auf ATMega für LCD1602

    Anzeige

    Hallo allerseits,

    ich möchte nun endlich mit der Verwendung eines Displays an einem Mega8 oder/und Mega16 beginnen.
    Einige Beiträge habe ich ja schon gesichtet und studiert ... bin aber noch nicht ganz schlau daraus geworden ...
    Nun meine Fragen:
    Kann ich für einen 4-Bit-Betrieb des LCDs nur EINEN Port nutzen, wie es mir vorschwebt (siehe unten), oder muss ich Steuer- und Datenleitungen an getrennten Ports ausgeben?
    Wenn getrennt, hilft mir ja eine 4-Bit-Anwendung nichts, da ich mit den anderen 4-Port-Pins nichts steuern kann, weil ja bei der Ausgabe (einem OUT PORTx,ldc_data) ALLE PINs des PORTs angesprochen werden und somit andere Funktionen mit angesteuert würden!?.

    ZB (M16):
    ; PC0 / 22 > + Transitor VCC to LCD
    ; PC1 / 23 LCD RS (register select)
    ; PC2 / 24 LCD RW (read/write)
    ; PC3 / 25 LCD E (enable)
    ; PC4 / 26 \
    ; PC5 / 27 \ > Datalines for LCD 1602
    ; PC6 / 28 /
    ; PC7 / 29 /

    Gruß Heinz

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.06.2011
    Ort
    Dresden
    Beiträge
    219
    Geht auf jeden Fall, wenn Du Deinen Treiber selber schreibst. Falls nicht, sollte in der Beschreibung des Treibers oder im Header-File
    ein Hinweis auf Beschränkungen in der Pinbelegung zu finden sein.
    (Ich würde allerdings die Daten ins lower nipple legen, spart ein paar Befehle.)
    mfg
    Achim

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.09.2008
    Ort
    Linz A
    Beiträge
    122
    Zitat Zitat von seite5 Beitrag anzeigen
    Geht auf jeden Fall, wenn Du Deinen Treiber selber schreibst. Falls nicht, sollte in der Beschreibung des Treibers oder im Header-File
    ein Hinweis auf Beschränkungen in der Pinbelegung zu finden sein.
    (Ich würde allerdings die Daten ins lower nipple legen, spart ein paar Befehle.)
    mfg
    Achim
    Danke, Achim!
    Da ich bzgl. Display absoluter Neuling bin, kannst dir vorstellen, wieviel ich über Treiber weiß ... und geschweige denn was von "selber schreiben" verstehe!

    Somit verstehe ich es so, dass ich Steuer- und Datenleitungen nicht auf EIN Port legen kann (auch wenn ich für die Daten die L-nipples verwende).
    Dann kann ich ja gleich bei der 8-Bit Version bleiben, da ich mit den H-nipples nichts "eigenes/anderes" anfangen kann.
    Aber warum verwenden dann nahezu alle die 4er Version, weil sie Pins "sparen"!?
    Wie bzw. wozu kann ich dann die anderen 4 Pins verwenden, wenn jedes Mal, wenn ich auf dem Port was ausgebe, außer den Pins für das LCD auch die anderen - nicht für das LCD bestimmten Pins - Werte enthalten? Die steuern ja dann diese Funktionen ohne es in diesem Moment zu wollen!
    Da hab ich ein grundsätzliches Verständnisproblem!
    mfg
    Heinz

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.06.2011
    Ort
    Dresden
    Beiträge
    219
    Nö, da hast Du mich falsch verstanden.
    Da Du den Treiber nicht selber schreiben willst/kannst, brauchst Du also eine Bibliothek/Treiber. Da gibt's dann einen Header (*.h).
    Dort wird über #defines festgelegt, welcher Pin des Controllers welche Display-bezogene Funktion übernimmt.
    Vielleicht ist es einfacher, wenn Du mal ansagst, welche IDE Du verwendest.
    ---
    Habe gerade mal auf github nach LCD1602 gesucht - dort ist von I2C-Interface die Rede - dann brauchst Du eh nur 2 Leitungen ...
    https://github.com/bitbank2/LCD1602

    mfg
    Achim

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.09.2008
    Ort
    Linz A
    Beiträge
    122
    Hab auch noch ein wenig gesucht und hab das hier gefunden:

    Anschluss an den Controller
    Jetzt, da wir wissen, welche Anschlüsse das LCD benötigt, können wir das LCD mit dem Mikrocontroller verbinden:
    Pinnummer
    LCD Bezeichnung Anschluss
    1 VSS GND (beim TC1602E: VCC)
    2 VCC +5 V (beim TC1602E: Gnd)
    3 VEE GND , Poti oder PWM am AVR
    4 RS PD4 am AVR
    5 RW GND
    6 E PD5 am AVR
    7 DB0 nicht angeschlossen
    8 DB1 nicht angeschlossen
    9 DB2 nicht angeschlossen
    10 DB3 nicht angeschlossen
    11 DB4 PD0 am AVR
    12 DB5 PD1 am AVR
    13 DB6 PD2 am AVR
    14 DB7 PD3 am AVR
    15 A Vorsicht! Meistens nicht direkt an +5 V abschließbar,
    sondern nur über einen Vorwiderstand, der an die Daten
    der Hintergrundbeleuchtung angepasst werden muss.
    16 K GND

    Da in obigem Beispiel auch nur ein Port für alle Leitungen zum LDC verwendet wird, hab ich meine Pinbelegung umgedreht:
    ; PC0 / 22 \
    ; PC1 / 23 \ > Datalines for LCD 1602
    ; PC2 / 24 /
    ; PC3 / 25 /
    ; PC4 / 26 > LCD RS (register select)
    ; PC5 / 27 > LCD RW (read/write)
    ; PC6 / 28 > LCD E (enable)
    ; PC7 / 29 > + Transitor VCC to LC

    Somit müsste es funktionieren.

    IDE!? Ich hab keine IDE. Zudem versteh ich nix von C (wo dein link hinführt). Ich programmiere in Assembler.
    Auch wenn es so aussieht, dass ich mehr mit AVRs mache, weil ich seit 2008 im Forum bin ...
    Ich hab bislang nur ganz kleine Sachen mit dem T13 gemacht, 3 kleine mit dem M8 und eine einfache Heizungssteuerung mit dem M16 (ohne LCD!).
    Jetzt möchte ich mit einem M16 einen Solartracker bauen. Der soll mit LCD ausgestattet sein, damit man Parameter, die im EEProm abgelegt werden, jederzeit über LCD anzeigen und anpassen kann.

    Wo ich auch noch grüble ist, wie ich ADC-Werte in Volt umrechne und diese mit zumindest einer Kommastelle ausgeben kann - in Assembler!
    Wie man für die Ausgabe Ziffern in Text umwandelt hab ich schon gefunden - allerdings auch nur in C

    Bis ins Frühjahr, wenn die Sonne wieder kräftiger wird, sollte meine Steuerung - zumindest AVR-mäßig - fertig sein.

    mfg Heinz

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.09.2008
    Ort
    Linz A
    Beiträge
    122
    Also,
    nach einer Unmenge an Recherchen, abwägen und vergleichen, bin ich zur Ansicht gekommen, dass meine ursprüngliche Pinbelegung des LCD-Ports ganz normal funktionieren muss. Also kein "Treiber" selbst geschrieben werden muss. Wichtig ist nur die Reihenfolge der nibbles.
    Bitte um Berichtigung, wenn ich falsch liege!

    In einem englisch-sprachigen Forum habe ich (bis auf die Steuerpins) die gleiche Pinbelegung gefunden.
    In meinem Fall ganz wichtig: solange mit dem Display gearbeitet wird, MUSS der Pin für die Stromversorgung IMMER 1 sein.
    Daher überlege ich gerade, ob ich nicht einen Pin eines anderen Ports dazu verwende, um nicht bei jeder LCD-Routine darauf achten zu müssen.
    Somit bleibt dann halt ein LCD-Port-Pin am µC unbelegt.

    [edit]
    ; PC0 / 22 > LCD RS (register select)
    ; PC1 / 23 > LCD RW (read/write)
    ; PC2 / 24 > LCD E (enable)
    ; PC3 / 25 n/c
    ; PC4 / 26 <> LCD DB4
    ; PC5 / 27 <> LCD DB5
    ; PC6 / 28 <> LCD DB6
    ; PC7 / 29 <> LCD DB7
    [endedit]
    Geändert von HeSt (09.12.2018 um 17:38 Uhr)

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.06.2011
    Ort
    Dresden
    Beiträge
    219
    Hallo HeSt,
    letztendlich musst Du irgendeinen Mittler zwischen Deinem Programm und der Hardware schaffen, ob man das nun Treiber nennt oder Bibliothek oder ...
    Alles in Assembler - Chapeau!
    Auch mit einer IDE (ich nutze AS7.0) kann man alles in Assembler machen.
    Ich hab bei solchen 4-bit-"Sachen" gern die zusammenhängenden Bits (i.d.F. die Daten) ganz "unten" (Bit 0 beginnend), spart Befehle und wenn Du eh alles
    selber schreibst ist es sowieso egal.
    mfg
    Achim

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.09.2008
    Ort
    Linz A
    Beiträge
    122
    Hi Achim,
    danke für den "Hut"
    Ich kenne nichts außer Assembler. Hab noch nie was mit IDE, Bibliotheken oder sonstigem was gemacht.
    Weiß gar nicht, wie man damit umgeht und was man alles damit machen kann.
    Ich lese immer wieder was von einer Bibliothek von Fleuri.
    Was kann die, wozu dient sie ...?
    Ich weiß nicht, wozu ich sie brauchen könnte. Hab etwas gestöbert, kann aber damit nix anfangen.
    Sie muss jedoch hilfreich sein, weil sie viele nutzen. Ich bin nur noch nicht drauf gekommen.
    Aber mal weiter sehen.
    LG Heinz

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.030
    Ich weiß nicht, wozu ich sie brauchen könnte. Hab etwas gestöbert, kann aber damit nix anfangen.
    So ein LCD kann eine relativ komplizierte Initialisierung benötigen, die dazu auch noch in einem gewissen Zeitfenster gemacht werden muss.
    Ausserdem müssen bestimmte Grundeinstellungen gemacht werden.
    Alle dafür benötigten Befehle sind dann in so einer Bibliothek enthalten.
    Man braucht also eigentlich nur die gewünschte Funktion z.B. initlcd aufrufen und die Bibliothek initialisiert das Display, damit es verwendet werden kann.

    Ohne solche Bibliotheken müsstest Du alles was zum Funktionieren des LCD's gebraucht wird selbst programmieren, stellenweise auf Bitebene.
    Aber warum was selbst programmieren, wenn es so etwas bereits debuggt zum Download gibt?

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.09.2008
    Ort
    Linz A
    Beiträge
    122
    Danke für die Unterstützung!

    Dass die Ansteuerung eines LCDs eine mühsame Sache ist, hab ich schon bemerkt.
    Allerdings hab ich die Init-Sequenzen bereits programmiert. Ist gut beschrieben.

    Als ich vor etwa 3 Jahren mit LCD anfangen wollte, hab mir den Schmöker "Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie" von Günter Schmitt gekauft (530 Seiten). Für mich leider nicht wirklich hilfreich, da er "UNI"-mäßig geschrieben ist und viel voraussetzt. Behandelt zwar auch etwas Basis, aber eben sehr wissenschaftlich. Und das ist mir zu hoch und zu umständlich.
    Ich benötige kurze verständliche Beispiele. Zudem sind die Programmbeispiele sehr verschachtelt und greifen immer wieder auf irgendwelche Routinen aus Bibliotheken zu. Es ist einfach zu unübersichtlich und zu mühsam sich da durchzuarbeiten und es zu verstehen.
    Ich finde z.B. nirgendwo einen Hinweis darauf, ob und wie man den "auto cursor" - also die automatische Weiterschaltung des Cursors - während einer Routine ab- und wieder einschalten kann.
    In meinem Gedankengang brauche ich es dazu, wenn ich Ziffern verändern will.
    Also z.B. einen 3-stellig Wert. Diesen will ich mit einer Taste verändern. Da es aber mühsam ist, sich z.B. von 50 auf 210 hoch zu tippen. Da ist es einfacher, immer nur eine Stelle (H,Z,E) verändern zu können. Dazu soll "auto cursor" off sein. Danach wieder ein. Ob das in diese Form sinnvoll ist, weiß ich noch nicht. Derzeit sieht es danach aus.

    So gibt es noch viele Dinge, die ich erst finden und behirnen muss, wie das geht.
    Z.B. wie man Ziffern und Zahlen in Text umwandelt, damit man diese auf dem LCD ausgeben kann. Einige Routinen hab ich gefunden, aber noch nicht kapiert.
    Das braucht halt auch seine Zeit. Und wenn ich nicht weiß, wie die Routinen in den Bibliotheken ticken, wie Werte übergeben werden müssen usw. hab ich einfach ein Problem damit.
    Wenn ich selber codiere, weiß ich wie was funktioniert - und vor allem - dann hab ich's kapiert.

Seite 1 von 18 12311 ... LetzteLetzte

Ähnliche Themen

  1. [ERLEDIGT] Atmega 644 & atmega8 parallel am ISP ... Reset beider atmega notwendig ..
    Von Ritchie im Forum AVR Hardwarethemen
    Antworten: 2
    Letzter Beitrag: 29.03.2013, 11:18
  2. CCPRO M128: Portbelegung
    Von Dirk im Forum Robby RP6
    Antworten: 0
    Letzter Beitrag: 22.05.2009, 22:26
  3. Portbelegung bei diesem Display [erledigt]
    Von Rob.Anfänger im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 18.11.2006, 18:12
  4. Portbelegung ATmega32
    Von Rob.Anfänger im Forum Elektronik
    Antworten: 7
    Letzter Beitrag: 15.11.2006, 19:59
  5. Antworten: 4
    Letzter Beitrag: 12.11.2006, 16:40

Berechtigungen

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