- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 18 ErsteErste 123412 ... LetzteLetzte
Ergebnis 11 bis 20 von 173

Thema: Portbelegung auf ATMega für LCD1602

  1. #11
    HaWe
    Gast
    Anzeige

    E-Bike
    ich will dich ja nicht missionieren, aber gerade als asm Programmierer müsste doch C(99) ideal für dich sein: C wird ja oft als asm mit lesbareren Wrappern beschrieben, welches durch den C Compiler in Maschinencode übersetzt wird, der compiliertem asm Code ebenbürtig ist in Kompaktheit, Effizienz und Schnelligkeit.
    Aber C ist ja noch viel mächtiger als asm:
    Warum wird/wurde das Multiuser-Multitasking-Betriebssystem UNIX nicht weiterhin (wie anfangs versucht) in asm programmiert, und auch nicht in irgendeiner anderen damals verfügbaren Programmiersprache, sondern warum wurde eigens dafür zunächst C entwickelt, um mit diesem "Tool" dann das Unix OS effizient entwickeln zu können?
    Vorteil: Plattformübergreifende Portierbarkeit, und gerade bei MCUs wie AVRs oder ARMs oder sogar auch SoCs: Millionen von Libs, die das Arbeiten damit simplifizieren, wenn man will - oder man erfindet für sich das Rad damit auf effiziente Weise neu, wenn man es so lieber möchte.

  2. #12
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.09.2008
    Ort
    Linz A
    Beiträge
    126
    Zitat Zitat von HaWe Beitrag anzeigen
    Aber C ist ja noch viel mächtiger als asm
    Du hast schon recht!
    Tatsächlich ist es bei mir aber so, dass ich immer nur dann an diese "Käfer" denke, wenn Bedarf besteht. Eine Problemlösung, die mit µC am einfachsten bewerkstelligt werden kann.
    Und das kommt bei mir sehr selten vor.
    Ich will mir C (noch) nicht antun, nur weil ich mit LCD grad auf Neuland gestoßen bin. Es geht nurmehr ums Display - Anzeigen und Ändern von Parametern. Alles andere (die gesamte Steuerung des Solartrackers) ist bereits soweit fertig. Somit müsste ich das in C auch neu codieren.

  3. #13
    HaWe
    Gast
    Somit müsste ich das in C auch neu codieren.
    jein -
    du kannst in C sogar auch asm Code inkludieren
    Aber ich verstehe deinen Standpunkt ntl-
    mir ging es als C-Hobbyprogrammierer genau so in Bezug auf C++ , doch auch da bin ich gerade dabei, mich zu "überwinden"

  4. #14
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.214
    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.
    Ich halte diese Vorgehensweise nicht für Zielführend.
    Mit den veränderten Werten willst Du ja sicher auch rechnen.
    Also müssen die Zahlenwerte als Integer oder Float vorhanden sein.
    Ich mach das immer so, das ich immer komplette Zeilen eines LCD beschreibe.
    Ich bin auch der Meinung, das man komplexere Projekte eigentlich nur noch mit viel Aufwand in Assembler schreiben kann.
    C ist da wirklich besser. Was mich am Anfang bei C immer gestört hat sind tatsächlich die Bibliotheken.
    Gerade bei AVR - GCC ( ist im Prinzip in AVR Studio 7 implementiert ) ist das schon etwas Gerödel.
    Um einen AVR mit Interrupts und direkten Flash und EEProm Zugriffen anzusprechen bindet man schon mal 4 Standard Bibliotheken ein.
    Sind die dann aber mal eingebunden wird das Ganze dann sehr einfach.
    Gut ist, das der Compiler von Studio 7 schon gleich meckert, was er denn für eine Library gerne hätte.
    Ausserdem ist AVR - GCC im Internet super dokumentiert auch aus verschiedenen Quellen.
    Ein weiterer " Schwachpunkt " von C ist, das Quasi jedes verfügbare Sonderzeichen der Tastatur für die Syntax genutzt wird.

    Wenn man mal verstanden hat, das ein C-Compiler von oben nach unten arbeitet und keine defines bzw. Variablen benutzt werden können, die nicht vorher definiert wurden hat man schon viele potetielle Fehlerquellen ausgemerzt.

    Fertige Bibliotheken für C gibt's da fast für jedes IC und jedes Display, das so ein Controller ansteuern kann.
    Sogar eine FAT Library für SD Karten gibt's.

    Ich hab als letztes Projekt gerade ein MiDi Clock Metronom mit Soundausgabe gebastelt.
    Das Erstellen und Debuggen hat in C gerade mal 1 1/2 Tage gedauert. Das hätte Ich in Assembler nicht machen wollen.

    Das Einbinden von Assembler Code in ein C-Programm ist nicht gerade trivial und auch stark vom verwendeten Compiler abhängig.
    Ich hab früher immer mit CodeVision AVR gearbeitet. Da war die Assembler Einbindung und die Grundeinstellungen für den Controller relativ einfach.
    Das Prog würde Ich als Einstieg in C durchaus empfehlen ( Version mit beschränkten Optionen ist kostenlos ) weil wesentlich einfacher zu handeln als AVR Studio.
    Ich nutze heute noch den Automatic Programm Generator um die Grundeinstellungen für den verwendeten Chip zu generieren.
    Den erzeugten Code kopiere Ich dann einfach in AVR - Studio.

    Meine Empfehlung ist einfach mal ausprobieren und nicht von den ersten Hürden abschrecken lassen.
    Geändert von wkrug (11.12.2018 um 11:39 Uhr)

  5. #15
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.09.2008
    Ort
    Linz A
    Beiträge
    126
    Zitat Zitat von wkrug Beitrag anzeigen
    Mit den veränderten Werten willst Du ja sicher auch rechnen.
    Nein. Die Werte werden ins EEPROM gesichert und dienen nur als Vergleichswert für verschiedene Aufgaben.

    Zitat Zitat von wkrug Beitrag anzeigen
    Also müssen die Zahlenwerte als Integer oder Float vorhanden sein.
    Ich mach das immer so, das ich immer komplette Zeilen eines LCD beschreibe.
    Wie kann ich "Zahlen" in das LCD schreiben? Ein LCD kennt ja keine "Ziffern" oder "Zahlen". Das sind alles nur "Zeichen". Oder liege ich mit dieser Annahme falsch?

  6. #16
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Bei den Assemblern MASM und TASM konnte man schon immer gut Makros einsetzen. Damit kann man so einiges anstellen. Ich habe in den 90gern für jemanden Basic in Makros umgesetzt. Der Quelltext sah nachher aus wie GW-Basic, konnte aber assembliert werden. Allerdings waren das schon fortgeschrittene Assembler. Das C wurde ja bereits in den 70gern entwickelt. Das Problem an den Assemblern war immer, dass man damit nicht sehr schnell voran kam. Programmentwicklungen dauerten wirklich sehr lange. Von daher hatte C sicher seine Berechtigung. Mittlerweile halte ich persönlich C/C++ aber für etwas rückschrittlich. Wie Du ja selbst siehst HaWe, ist es manchmal echt schwierig damit und die Sprache ist "kryptisch" gestaltet - nicht wirklich einfach zu erlernen. Für jemanden, der auf einem System Assembler beherrscht, gibt es eigentlich nichts Besseres, weil man mit Assembler wirklich alles machen kann - keine Grenze. Da ich selber 10 Jahre fast nur Assembler benutzt habe, finde ich auch, dass es für jemanden der C nicht kann / C++, es einfacher ist, sich in die Assemblerprogrammierung - bei den ATmegas zum Beispiel - einzuarbeiten.

    MfG

  7. #17
    HaWe
    Gast
    asm halte ich für eine absolute Sackgasse, aber jedem Tierchen sein Plaisierchen ...

    ... dennoch, wenn du C schon als "rückschrittlich" bezeichnest, was ist dann asm ??

    Übrigens sind auch moderne Sprachen wie C++17 oder Frameworks wie C# oder Mono C-basiert, und selbst Java, Pascal oder Python sind per Syntax äußerst C-ähnlich (und schau mal nach, in welcher Programmiersprache die selber geschrieben worden sind...) .
    Auch was das Lernen angeht, muss ich dir widersprechen:
    C ist sehr einfach zu lernen, es ist extrem einfach konstruiert mit einer ganz simplen Syntax und nur knapp 20 reservierten Wörtern.
    Nur wenn man alle Tricks mit Pointern, Referenzen und Objekten ausreizen will (mit Dingen, die teilw. in anderen Sprachen noch nicht einmal grundsätzlich möglich sind), muss man schon auch dazulernen wollen - aber wo ist das anders?


    Code:
    #include <LiquidCrystal.h>
    // initialize the library by associating any needed LCD interface pin
    const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
    LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
    
    void setup() {
      float ftest;
      ftest=millis() / 1000.0;
    
      lcd.begin(16, 2);
      lcd.setCursor(0, 0);
      lcd.print("hello, world!");
      lcd.setCursor(0, 1);
      lcd.print(ftest);
    }
    Geändert von HaWe (11.12.2018 um 17:04 Uhr)

  8. #18
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.09.2008
    Ort
    Linz A
    Beiträge
    126
    Hallo Freunde,
    euer Eifer in Ehren, aber welche Programmiersprache die bessere ist, ist nicht Thema dieses Treads.
    Hier geht's unter anderem lediglich um die Ansteuerung eines LCDs und wie man "Zahlen" raus schreibt, diese verändern und wieder als Zahl abspeichern kann.
    Oder wie man den Cursor positioniert bzw. auto-cursor abschaltet.
    Und das in Assembler.
    Die Init-Prozedur ist fertig. Ich bin weiter am Suchen nach Lösungen zu obigen Zeilen. Einiges hab ich gefunden, versteh es aber noch nicht ...
    Es dauert noch eine Weile ...

  9. #19
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Zitat Zitat von HaWe Beitrag anzeigen
    ... was ist dann asm ??
    Der grundlegende Baustein zur Programmierung auf Hardwareebene.

    Zitat Zitat von HaWe Beitrag anzeigen
    Nur wenn man alle Tricks mit Pointern, Referenzen und Objekten ausreizen will...
    Das geht in JavaScript mindestens genau so gut und wesentlich unkomplizierter.

    Wenn der C-Compiler mal Code zur Variablentypenumwandlung mal selbst einfügen würde, anstatt immer nur zu melden, dass es hier und da und dort nicht zusammen passt, wäre es auch schon einiges einfacher - zum Beispiel.

    MfG

  10. #20
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.09.2008
    Ort
    Linz A
    Beiträge
    126
    Hi,
    bei unten stehendem Beispiel handelt es sich um ein 4*20 LCD.

    Bitte was bedeuten die Steuerzeichen am Ende der letzten Zeile? Ich hab leider keinen Hinweis darauf gefunden.
    0x0D ist mir klar: carriage return = cursor in Pos 1 der Zeile.
    Aber 0xFE und 0xFF ???
    Und sollte nach dem 0x0D nicht auch ein 0x0A = line feed = nächste Zeile kommen?
    Oder impliziert 0x0D das LF in diesem Fall?

    LcdTextOut:
    .db "Spannung+Strom tn24",0x0D
    .db "U = xx,xx V",0x0D
    .db "I = xxx,x mA",0xFE,0xFF

Seite 2 von 18 ErsteErste 123412 ... 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, 12:18
  2. CCPRO M128: Portbelegung
    Von Dirk im Forum Robby RP6
    Antworten: 0
    Letzter Beitrag: 22.05.2009, 23:26
  3. Portbelegung bei diesem Display [erledigt]
    Von Rob.Anfänger im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 18.11.2006, 19:12
  4. Portbelegung ATmega32
    Von Rob.Anfänger im Forum Elektronik
    Antworten: 7
    Letzter Beitrag: 15.11.2006, 20:59
  5. Antworten: 4
    Letzter Beitrag: 12.11.2006, 17:40

Berechtigungen

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

Labornetzteil AliExpress