- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 10

Thema: LCD Ausgabe

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    21.04.2010
    Beiträge
    31

    LCD Ausgabe

    Hallo,
    was muss an diesem Quelltext geändert werden, damit die Ausgabe über LC-Display auf einem M32 Board erfolgt?

    Code:
    '###################################################
    '#              ultraschall.bas                    #
    '###################################################
    '#Dieses Programm demonstriert die Verwendung      #
    '#des Ultraschall Entfernungssensors SRF05         #
    '#mit dem Controllerboard RN-Control               #
    '#                                                 #
    '#Aufgabe:                                         #
    '#Entfernung wird gemessen und in Zentimetern über #
    '#RS232 ausgegeben                                 #
    '###################################################
    
    $regfile = "m32def.dat"                                     ' Bestimmung des Prozessors
    $crystal = 16000000                                         ' Quarzfrequenz
    $baud = 9600                                                ' RS232-Uebertragungsrate
    $hwstack = 32
    $framesize = 32
    $swstack = 32
    
    
    Dim Zeitmessung As Word
    Dim Entfernung As Word
    
    Print "**** SRF05 mit RN-MINICONTROL *****"
    Print "Entfernung in cm anzeigen"
    
    ' Der Ultraschallsensor wird am Port A Pin 7 angeschlossen
    Config Pina.7 = Output                                      ' Bestimme den Anschluss des Sensors und setze ihn auf Output
    
    Do
        Porta.7 = 0                                             'Port Low
        Pulseout Porta , 7 , 40                                 '10uS Impuls bei 4 MHz senden  (10*4=40)
        Pulsein Zeitmessung , Pina , 7 , 1                      ' Den Puls wieder empfangen
        Zeitmessung = Zeitmessung * 10                          'mal 10 da Pulsein in 10uS Einheiten Ergebnis ermittelt
        'Echo-Impuls ist 100uS bis 25 mS lang. Über 30 mS bedeutet, dass kein Objekt im Bereich ist.
        ' Um eine Messung zu starten, wird ein Impuls von 10 us an den Triggereingang gelegt.
        ' Der Wandler wird darufhin für 200 us (8 Zyklen mit je 40 KHz) getaktet. Der Echo-Ausgang geht auf High.
        ' Das erste hereinkommende Echo schaltet den Echo-Ausgang wieder auf Low.
        ' Die Entfernung ergibt sich rechnerisch als Produkt aus der Schallgeschwindigkeit (344 m/s in Luft bei 21 Grad Celsius)
        ' und der Länge des Echoimpulses. Da die Streckes des Schalls doppelt zurück gelegt wird, ist das Ergebnis
        ' durch 2 zu dividieren.
        ' s[m] = 344 m/s * t[s] / 2
        ' ==> s[m] = 172 m/s * t[s]
        ' Je nach Genauigkeit sind Vereinfachungen möglich und Sinnvoll
        ' s[cm] = 172 * t[us] / 10000
        ' ==> s[cm] = t / (10000 / 172)
        ' ==> s[cm] = t / 58,14
        Entfernung = Zeitmessung / 58                           'Umrechnen in Zentimeter
        ' Beträgt die Entfernung einen Abstand von mehr als 10 cm, dann gib zwei  Töne aus.
        If Entfernung = 0 Then
          Print "Sensor not activ!"
        End If
        If Entfernung > 10 Then
              Sound Portd.7 , 400 , 450
              Waitms 5
              Sound Portd.7 , 400 , 600
              Waitms 5
        End If
        If Entfernung = 0 Then
          Print "Sensor not activ!"
        End If
        Print "Entfernung: " ; Entfernung ; " cm"
        Wait 1
    Loop
    [/code]

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    27.03.2009
    Beiträge
    96
    Hi,

    Sorry aber das steht doch in tausenden von Bascom beispielcodes, aber wir wollen ja mal nicht so sein.
    Da du uns nur sehr wenig verrätst (welches Display...?) kann ich dir nur empfehlen im RN-Wissen nach zu lesen: Klick mich
    Den Rest musst du dir schon selber aneignen.

    MfG Maxtronik

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    21.04.2010
    Beiträge
    31
    Danke für deine Antwort Maxtronik!
    Es ist ein "MC1602Q-TGL" 2 x 16 Display.

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    27.03.2009
    Beiträge
    96
    Oh mein Gott, wo hast du das denn ausgeschlachtet?!
    So wie es im Datenblatt aussieht (leider alles Chinesisch) ist das ein display ohne Treiber IC (wie zum beispiel dem HD44780 u.s.w.).
    (Falls du jedoch ein Ic auf der Rückseite findest sag sofort bescheid welches es ist!)
    Dadurch wird es ziemlich schwer (fast unmöglich) das Display mit Bascom anzusteuern.
    Falls du es gekauft hast, könntest du mir den Link zum shop schicken.

    MfG Maxtronik

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    21.04.2010
    Beiträge
    31
    Habe es von einem Freund mit dem RP6-Erweiterungsboard gekauft. Aber auch schon länger her...
    In der pdf von dem Board steht bissl was drin wie man den ansteuert, aber halt alles in C

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    27.03.2009
    Beiträge
    96
    Ich würde dir ja gerne helfen, aber du musst mir schon noch sagen was da drinne stand und du könntest den C code mal reinstellen.

    MfG Maxtronik

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    21.04.2010
    Beiträge
    31

    LCD Ausgabe

    Ach ja, sorry!

    Das steht in der Doku zum AM32 Board:

    Code:
    3.1.6. LC-Display
    Das LC-Display ist ideal um Sensorwerte und Statusmeldungen auszugeben, während
    der Roboter nicht am Rechner angeschlossen ist. Die Ausgabe auf das LC-Display
    funktioniert ähnlich wie bei der seriellen Schnittstelle – aber natürlich gibt es ein paar
    kleine Besonderheiten. Schauen Sie sich am besten die Beispielprogramme an, dann
    wird schnell klar wie man das LCD verwenden kann.
    void initLCD(void)
    Diese Funktion muss immer zu Beginn des Programms aufgerufen werden, um das
    LCD zu initialisieren.
    void setLCDD(uint8_t lcdd)
    Diese Funktion (und write4BitLCDData) benötigen Sie normalerweise nicht – wir beschreiben
    Sie hier nur um kurz zu erläutern wie das Display angesteuert wird.
    Das LCD wird im 4-Bit Modus betrieben. Es werden daher nur vier Datenleitungen und
    zwei Steuerleitungen benötigt (Enable (EN) und Register Select (RS), Read/Write
    (R/W) ist dauerhaft auf Masse geschaltet wodurch das LCD ausschließlich beschrieben
    werden kann. Lesen ist nicht möglich und auch nicht notwendig). Die vier Datenleitungen
    sind wie die LEDs am Schieberegister angeschlossen, um Ports zu sparen. Analog
    zur setLEDs Funktion, setzt setLCDD die Datenleitungen des LCDs. Allerdings setzt
    diese Funktion auch kurz das Enable Signal, damit das LCD die Daten übernimmt.
    void write4BitLCDData(uint8_t data)
    Da wir dem LCD eigentlich 8 Bit Befehle und Daten senden müssen, müssen die zu
    übertragenden Bytes aufgeteilt werden. Die Funktion write4BitLCDData übernimmt
    genau das – 8 Bit Daten werden in zwei 4 Bit „Nibbles“ aufgeteilt und übertragen.
    - 14 -
    RP6 ROBOT SYSTEM - 3. RP6 CONTROL Library
    void writeLCDCommand(uint8_t cmd)
    Diese Funktion ruft write4BitLCDData auf, setzt allerdings die RS Leitung auf low, um
    einen Befehl an das LCD zu senden.
    void clearLCD(void)
    Sendet den Befehl zum Löschen des Display Inhalts an das LCD.
    void clearPosLCD(uint8_t line, uint8_t pos, uint8_t length)
    Löscht einen bestimmten Bereich des Displays. Die Parameter sind: Zeile, Startposition
    in der Zeile und Länge des zu löschenden Bereichs.
    Beispiel:
    clearPosLCD(0,10,5); // löscht in der ersten Zeile des Displays
    // die letzten 5 Zeichen!
    void setCursorPosLCD(uint8_t line, uint8_t pos)
    Setzt den Textcursor an eine bestimmte Position auf dem Display. Der Parameter line
    kann 0 für die obere, oder 1 für die untere Zeile sein. Der Paramter pos darf für
    2x16er LCDs im Bereich von 0 bis 15 liegen.
    void writeCharLCD(uint8_t ch)
    Sendet ein einzelnes Zeichen an das LCD – das funktioniert analog zur writeChar
    Funktion für die serielle Schnittstelle. Allerdings muss man hier zunächst sicherstellen
    das der Cursor des Displays an der richtigen Position ist, denn sonst sieht man den
    Text nicht!
    Beispiel:
    setCursorPosLCD(1,5); // positioniere Cursor in der zweiten Zeile, Zeichen 5.
    writeCharLCD('R'); // jetzt wird „RP6“ ausgeben, und zwar
    writeCharLCD('P'); // beginnend an der Cursorposition!
    writeCharLCD('6');
    void writeStringLCD(char *string)
    Analog zur entsprechenden Funktion für die serielle Schnittstelle, sendet write-
    StringLCD eine nullterminierte Zeichenkette aus dem SRAM an das LCD. Also sollten
    Sie diese Funktion nur verwenden, wenn der Text auch wirklich im RAM liegt und nicht
    nur fest vordefiniert ist. Dazu ist das Makro:
    writeStringLCD_P(STRING)
    besser geeignet, da hier der Text direkt aus dem Flashspeicher gelesen wird, ohne
    den Umweg über den Arbeitsspeicher.
    void writeStringLengthLCD(char *string, uint8_t length, uint8_t offset)
    Mit dieser Funktion kann ein Text mit einer bestimmten Länge auf dem LCD ausgegeben
    werden. Die Paramter sind identisch zu denen der entsprechenden Funktion für
    die serielle Schnittstelle.
    showScreenLCD(LINE1,LINE2)
    Um die Textausgabe auf dem LCD etwas zu vereinfachen, kann man mit dieser Funkti-
    - 15 -
    RP6 ROBOT SYSTEM - 3. RP6 CONTROL Library
    on beide Zeilen des LCDs mit nur einem Aufruf beschreiben. Der Cursor wird automatisch
    richtig platziert und der Inhalt des Displays vorher gelöscht.
    Beispiel:
    showScreenLCD("LCD Zeile 1", "LCD Zeile 2");
    void writeIntegerLCD(int16_t number, uint8_t base)
    Die schon von der seriellen Schnittstelle bekannte Funktion um Zahlen in den Formaten
    BIN, OCT, DEC oder HEX auf dem LCD auszugeben.
    void writeIntegerLengthLCD(int16_t number, uint8_t base, uint8_t length)
    Auch writeIntegerLengthLCD ist bis auf den Namen identisch zur bereits bekannten
    Funktion für die seriellen Schnittstelle.

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    21.04.2010
    Beiträge
    31

    LCD Ausgabe

    Wenn du möchtest kann ich dir die PDF zuschicken. Es ist dann einfacher zu lesen.

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    21.04.2010
    Beiträge
    31

    LCD Ausgabe

    Hier ist ein Beispielprogramm in C für LCD, was bei dem M32 dabei war.
    Angehängte Dateien Angehängte Dateien

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    02.06.2005
    Alter
    34
    Beiträge
    203
    Hi, ich hab das gleiche blos beim Conrad finde ich keine Dokumentation mehr.
    Könnte mir bitte jemand die Daten dafür geben, am besten rp6control.h oder so.
    Danke schon mal im Vorraus.
    MfG

    der aller dümmste Anfänger

    bitte bei schwerwiegenden Rechtschreibfehlern oder Unleserlichkeiten eine PN schreiben
    Danke

    http://www.openmoko.org/

Berechtigungen

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

Labornetzteil AliExpress