Gefunden für lcd ascii - Zum Elektronik Forum |
| 1 - serielles Kommunikationsproblem -- serielles Kommunikationsproblem | |||
| |||
| 2 - String auslesen und an LCD senden (16F877) -- String auslesen und an LCD senden (16F877) | |||
| Hallo an alle,
ab und an programmiere ich auch an PIC herum. Das für mich etwas "Blöde" ist die Zeichenausgabe auf ein LCD-Display. Initialisierung als auch Ausgabe funktionieren einwandfrei! Ist es aber nicht irgendwie möglich, z.B. den String "Kommando: " einfacher auszugeben, als bisher so: movlw 'K' call LcdOut movlw 'o' call LcdOut movlw 'm' call LcdOut movlw 'm' call LcdOut movlw 'm' call LcdOut movlw 'a' call LcdOut movlw 'n' call LcdOut movlw 'd' call LcdOut movlw 'o' call LcdOut movlw ':' call LcdOut movlw ' ' call LcdOut Im Prinzip bracht man doch nur die ASCII-Codes in (String-)Variable zu schreiben und diese auszulesen in einer Schleife? Leider hat nun mal ein PIC keine String-Variablen. Hat da jemand eine kleine Routine für mich zum Testen? Vielen Dank! Gruß Jens ... | |||
3 - ASCII Coder/Encoder IC gesucht -- ASCII Coder/Encoder IC gesucht | |||
| ASCII ist weit mehr als nur Buchstaben.
Das heißt, du möchtest an 7 Leitungen binär bestimmte Signale anlegen und auf einem Display soll dann der entsprechende Buchstabe bzw. das entsprechende Zeichen erscheinen? Ich glaube fast nicht, dass es dazu ein fertiges IC gibt, zumal die Darstellung nicht so simpel ist, wie auf einer 7-Segment-Anzeige. Die (für mich) einfachste Lösung wäre ein µC und ein kleines LCD-Display, aber dazu müsste der µC programmiert werden. ... | |||
| 4 - Stand-alone Tastatur - machbar??? -- Stand-alone Tastatur - machbar??? | |||
| Prinzipiell geht das so: Tastendruck -> Tastatur sendet sog. "Scancode" über den PS/2-Bus, der µC übersetzt das in ein ASCII-Zeichen und speichert es ab.
C++ ist schonmal nicht schlecht, für AVRs gibt es einen freien C-Compiler. Da gibts auch bestimmt schon fertige Librarys für das Tastaturprotokoll und das SD-Karteninterface samt FAT32-Dateisystem. Zitat : arbeite ich mich gerne in neues ein, aber ich fürchte, dass das für den Anfang ein bischen komplex ist, oder? Aller anfang ist schwer Aber je nach dem wie talentiert du bist hast du das schnell begriffen.
Zitat : Stimmt es, dass man zum programmie... | |||
| 5 - Grafisches Display ansteuern -- Grafisches Display ansteuern | |||
| Hallo!
Hab mich selbst mal mit einem 128*64 LCD am 8031 beschäftigt, damals in Assembler. Auf dem Display sind 2 Controller, rechte und Linke Hälfte. Habe zuerst Routinen für Punktansteuerung entwickelt (Umschaltung zwischen den Controllern damit Pixel fortlaufend ansprechbar), darauf aufbauend für Linien, Recktecke leer und gefüllt,... Zum Initialisieren, Löschen, Scrollen habe ich die Controller parallel beschrieben, das Auslesen, sofern nötig, muß natürlich einzeln erfolgen. Es war kein Zeichensatz im Display vorhanden, den hab ich im Speicher Abgelegt wo die Umsetung von ASCII-Zeichen in Pixel erfolgte, welche mit zuerstgenannten Routinen direkt in den Displayspeicher geschrieben wurden. Extra Framebuffer im Controller war nicht sinnvoll, wegen einigen geänderten Pixel immer den ganzen Displayinhalt zu schreiben wäre zu langsam gewesen. Hier mal was aus meiner Linksammlung: LCD-Projekte LCD Info mfg lötfix [ Diese Nachricht wurde geändert von: Lötfix am &n... | |||
| 6 - Energiemessgerät über PC auslesen ?!? -- Energiemessgerät über PC auslesen ?!? | |||
Zitat : , also sollten die Werte ja irgendwie in digitaler Form im Gerät vorliegen. Sicher, aber wenn die Daten "nach draussen" kommen, liegen sie nur in der Form "Segmentmultiplex für LCD Ansteuerung" vor. Es gibt einen Chip, der dieses Format in serielle ASCII-Daten wandeln kann und über einen Optokoppler an den PC schickt, nur leider ist der nicht einzeln zu kaufen. Er steckt in den Metex-Multimetern mit RS-232-Schnittstelle ... ... | |||
| 7 - UART Probleme -- UART Probleme | |||
Es ist halt verdammt viel Code zum lesen und ich wollte nicht jemand qualifiziertes verschrecken .
also gut: UART.c Code : #include <avr/io.h> #include <inttypes.h> #include <AVR/io.h> //Definition der Ports #include <string.h> #include <AVR/interrupt.h> #include <AVR/signal.h> #define BAUD 9600UL #define UBRR_BAUD ((F_CPU/(16UL*BAUD))-1) uint8_t buffer; char *UARTText; char UARTzeiche... | |||
| 8 - LED-Matrix 8x64 ansteuern -- LED-Matrix 8x64 ansteuern | |||
| Das ist garnicht so einfach in den alten Datenbüchern noch etwas zu finden, aber die heutigen LCD-Controller müssten auch soetwas enthalten.
Hier http://hw.cz/pdf/elatec_lcd_family.pdf z.B. ist soetwas auf der vorletzten Seite abgebildet, allerdings nur als 5x7 Matrix. Ein alter Trick um Speicherplatz zu sparen ist es ein Tag-Bit mitabzuspeichern. Für eine 5x7 Zeichenmatrix z.B. brauchst du ja nur 7 Bit eines Bytes. Das 8.Bit muss man aber nicht wegwerfen, sondern man kann es verwenden, den Controller anzuweisen die übrigen sieben Bits zwei oder drei Scans tiefer auszugeben. Auf diese Art sehen auch Unterlängen einer 5x7 Matrix vernünftig aus. Ansonsten laufen die Teile als "ASCII Character Generator" herum (Es gibt auch andere, z.B. für das japanische Kata Kana). Ausserdem ist im Grafikchip eines jeden PC soetwas versteckt, aber ich weiß leider nicht wie man diesen ROM vom Computer her auslesen kann. Auch im Betriebssysten selbst und diversen Programmen sind solche Zeichengeneratoren abgespeichert. Kannst ja mal den Gockel ein bischen befragen. | |||
| 9 - Probleme bei LCD-Ansteuerung -- Probleme bei LCD-Ansteuerung | |||
| Moin,
Wie sollen wir denn den Fehler finden, wenn wir den Originalkode nicht haben? Du musst keine Verzögerung, wie von Jorn vorgeschlagen, reinbauen, wenn du das Busyflag testest. Das tust du, ob du es richtig machst, kann ich dir nicht beantworten, da ich keinen PIC-Assembler verstehe, oder nur rudimentär. Sollte das Testen des Busyflags allerdings nicht klappen, dann ist Jornbytes Einwand allerdings berechtigt. Tabelle? Werden denn die richtigen Zeichen im ROM korrekt addressiert? Wann ist der String zuende? Nullterminiert? Oder bekannte Länge? Wenn er nicht nullterminiert ist, dann wird fleißig jeder weitere Datensalat aus dem Flash oder RAM gelesen und als Datenbyte ins Displayram kopiert. Nullterminiert bedeutet aber auch, dass du selbst überprüfen musst, ob das gelesene Zeichen ungleich NULL (0) ist! Sind die Zeichen unter den ASCII-Zeichen 0x0-0x7, dann wird der Inhalt des Character Generator RAMs aufs Display abgebildet. Das Ganze geht so schnell, dass du vermutlich kaum die ersten paar korrekten Zeichen des Strings sehen kannst, bevor sie mit Datensalat überschrieben werden. Ist dann noch ein Fehler in der LCD-Routine, was ich wie gesagt nicht herausfinden kann, dann ist es klar, dass das nich... | |||
| 10 - Mikrokontrollerprint spinnt!! Grund: unbekannt -- Mikrokontrollerprint spinnt!! Grund: unbekannt | |||
| Hallo Rambodischien,
hab in der Empfangsroutine noch ein mögliches Problem gesehen: Wenn cEmpfangen nicht mit Nullen initialisiert ist, werden mit jedem Schritt zuviele Zeichen nach sEmpfangen angehängt. Denn es fehlt bei cEmpfangen die Stringendekennung. Entweder Du machst so: cEmpfangen[z]=UDR; cEmpfangen[z+1]=0; // hier aufpassen, dass das Array immer gross genug ist strcat(sEmpfangen,cEmpfangen); oder machst vor der for Schleife ein memset(cEmpfangen,0x00,sizeof(cEmpfangen)); Zu dem Sonderzeichen ans Display: Wenn das so ein Standard-HD44780-Typ ist, werden mit Ascii-Code 00-0F CGRAM-Zeichen aktiviert. Das sind user-definierte Zeichen, die der User ( nämlich Du ) wahrscheinlich nicht definiert hat. Von daher
wird dann irgendwelcher Bitmüll angezeigt. Am besten du ersetzt nicht darstellbare Zeichen in der LCD-Anzeige durch einen Punkt und/oder hinterlegst Sonderzeichen für 0x0A und 0x0D. Gruß Stefan ... | |||
| 11 - Datenübertragung zwischen C-Control M-Unit und Atmega 8 -- Datenübertragung zwischen C-Control M-Unit und Atmega 8 | |||
| Also ich hab zwar auch nie bascom programmiert, aber ich hab ne c-control hier rumliegen, die Staub ansetzt ^^
Ich hab jetz beim Einlesen in die Materie also einen ähnlich unbefangenen Blick auf die Dinge wie tvgucker. Als allererstes möchte ich dich auf die seite http://avrhelp.mcselec.com/bascom-avr.html verweisen, falls du die noch nicht kennst. Beim sende Programm scheint mir so weit alles in Ordnung zu sein, Beim Programm das die Daten auf dem LCD anzeigt ist mir Spontan folgendes ins Auge gesprungen. Du Definierst die Eingabevariable A als "String", Benutzt jedoch zum Lesen vom Port das commando "Inputbin", Das liest so viele Bytes wie es braucht vom Port, In dem Fall meines Erachtens nach die Länge des Strings, die bei deiner Definition Aber 0 ist. Ich würde da auf jeden Fall als erstes mal den Datentyp der Variable auf Byte ändern, weil du dann sicher sein kannst, dass er nur versucht 1 Byte vom Port zu lesen. Gibt es eigentlich einen bestimmten Grund warum du "inputbin" benutzt und nicht "Input" ? Meines Erachtens nach ist ... | |||
| 12 - C: Variable wird unerklärlicherweise gelöscht.... -- C: Variable wird unerklärlicherweise gelöscht.... | |||
| Hallihallo zusammen,
ich arbeite gerade an meinem ersten grösseren Projekt mit C. Es gilt ein Nokia 3310 LCD anzusteuern. Die Ansteuerung klappt wunderbar, nur hab ich ein Problem mit der Programmierung. Es geht um folgendes. Jede Sekunde wird vom Timer1 ein Output Compare A Interrupt ausgelöst. In der Interruptroutine wird eine Variable ("Sekunde") hochgezählt. Dieser neue Sekunden-Wert soll dann auf dem LCD erscheinen. Dazu muss das LCD zuerst gelöscht werden. Dazu werden zwei verschachtelte For-Schleifen durchlaufen. Nun kommts. Sobald die erste Schleife den Wert "6" annimmt, springt der Wert von "Sekunde" völlig zusammenhangslos auf 0 zurück. (Im AVR Studio Simulator eruiert und durch Realität bestätigt.). Mein Wert wird auf dem LCD also nicht hochgezählt, sondern bleibt immer 0... Hier die Codeschnipsel: Initialisierung der Variable: Code : | |||
| 13 - Nokia-3310-Display und PWM-Steuerung (fertiges AVR-Assembler-Projekt) -- Nokia-3310-Display und PWM-Steuerung (fertiges AVR-Assembler-Projekt) | |||
| Hallo,
Da ich keines der im Internet auffindbaren Programme vernünftig zum laufen bekam (um meine Displays zu testen) habe ich mir ein eigenes, recht umfangreiches Programm zur Ansteuerung eines Nokia3310-Displays geschrieben. Das Programm ist bisher nur auf Text ausgelegt, Grafiken sind aber leicht "nachzurüsten". Die ASCII-Zeichentabelle ist von http://www.microsyl.com/ übernommen und überarbeitet (Buchstaben haben jetzt eine Leerspalte mit im Gepäck) Da ich das ganze dann auch irgendwie anwenden wollte, und ein Kumpel grade dabei war mich über Motorsteuerungen auszuquetschen habe ich eben ne PWM-Steuerung um den Code gebastelt. Das Ergebnis gibt es im Anhang. Bei mir ist das Programm in verschiedene .asm-Dateien untergliedert, die dann am Schluss per "include" ins Hauptprogramm eingebunden werden, für den Upload hab ich jetzt alles zuammengepackt. Der Grund warum ich das hier poste ist einfach der, dass ich das LCD-Programm wohl nicht sonderlich häufig nutzen werde, und es schade um die Mühe fände, wenn es bei mir in irgendeinem Ordner vergammelt... Bei Interesse gibt es auch noch nen Schaltplan vom Prototy... | |||
| 14 - C-Control Unit M2.0 GET geht nicht -- C-Control Unit M2.0 GET geht nicht | |||
| Hi Leute,
Ich versuche gerade Daten über den COM port zu meiner C-Control zu senden aber irgendwie scheint der befehl GEt nicht zu reagiren. Ich programmiere mit basicpp und die software version meiner c-control ist OS V2.05. Ich sende mit meinem Rechner den String "ASCII Zeichen 50 + ASCII Zeichen 13" also Chr(50)+Chr(13) der Programmcode für die C-Control sieht so aus: define light port[16] light = off lcd.init define data as Byte #loop if RXD then get data end if lcd.pos 1,1 lcd.print data lcd.print " " goto loop data ist nach dem senden 255 und der befehl RXD bleibt immer TRUE. Mit Input funktioniert es aber. Ich sende mit meinem Rechner den String "50"+Chr(13)der Programmcode für die C-Control sieht so aus: define light port[16] light = off lcd.init define data as Byte #loop if RXD then input data end if lcd.pos 1,1 lcd.print data lcd.print " " goto loop data erhält den Wert 50 und RXD wird wieder False. Was mache ich bei der Get version falsch? .
[ Diese Nachr... | |||
| 15 - 433 mHz USB Funk LCD -- 433 mHz USB Funk LCD | |||
| hallo,
was für ein LCD willst du denn nehmen? wenns diese intelligenten mit controller sind (nicht grafisch), dann wird das ganze relativ einfach. die ansteuerung der zeichen vom display ist meist dem ASCII code sehr ähnlich, oder sogar gleich. ich würde die zeichen einfach direkt per RS232 und ASCII übertragen. zusätzlich wirst du noch ein paar befehle brauchen für "neue zeile, lösche display, u.s.w." mfg wulf ... | |||
| 16 - RS232 Schnittstelle autom. umschalten, oder doppelt verwenden? -- RS232 Schnittstelle autom. umschalten, oder doppelt verwenden? | |||
| Hallo
Ich habe eine Photovoltaikanlage, an der ein Datenlogger angeschlossen ist. An diesem Datenlogger ist ein RS232 Ausgang der ASCII Daten an meinen PC überträgt, wo diese Daten dann in Exceltabellen abgelegt werden. Außerdem werden díese Daten noch in einem Softwareprogramm aufgearbeitet damit eine visuelle Darstellung im Internet möglich ist. Nun kann man aber diesen RS232 Ausgang auch für ein LCD Display nutzen, um evt. im Wohnraum sich die aktuellen Werte anzeigen zu lassen. Aber ich kann die RS232 nur einmal nutzen, entweder für den PC oder für die Anzeige. Ist es nun möglich eine Umschaltung zu bauen das in einem Zeitzyklus die Schnittstelle einmal für den PC und einmal für das Diplay geschlatet wird.? Oder kann man doch diese Daten zweimal nutzen. Da ich in der Elektronik Anfänger bin, wäre ich für gute Antwort dankbar. Gruss Günter ... | |||
| 17 - Zeitnehmung -- Zeitnehmung | |||
| Hallo!
Hallo! Ich möchte eine Zeitmessung mit einer Zwischenzeit bauen, die Ausgabe erfolgt auf einer LCD-Anzeige und das ganze soll natürlich interrupt gesteuert laufen(Timer0). Ich habe einen PIC-Controller 16F84. Nun habe ich folgendes Problem: Ich hätte gerne dass die Zeitanzeige bei 00:0 (sec:zehntel) startet. In meiner bisherigen Interuptroutine habe ich aber bis lang noch mit dem Sekundenzähler zu kämpfen.Bin schon froh dass es ziemlich genau von 0 bis 9 im sekundentakt zählt. Wie funktioniert ein Überlauf? In diesem Programm funktioniert er leider nicht wie gewünscht:-( Meine Interruptrutine schaut so aus: interrupt int_server (void) { int_save_registers if (INTCON.2 == 1) { count++; if (count == 61) { count =0 ; counter++; if (counter == 10) counter =0 ; } byte = 0x0c0; //Wechsel in die nächste Zeile SendCmd (); //Positionsangabe am Display byte = 0x0c5; //An stelle 5 SendCmd (); //Positionsangabe am Display byte = counter+48; //ASCII-Code SendChar (); if(counter == 10) { zehner++; byte = 0x0c5; //Zeile 2;St... | |||
| 18 - HiFi Verstärkerändnisfragen: Integer-to-Char für LCD und Dallas DS1821 (Temp.Sens.) -- HiFi Verstärkerändnisfragen: Integer-to-Char für LCD und Dallas DS1821 (Temp.Sens.) | |||
| Hallo liebe Leute,
ich benutze einen ATmega8535 mit CodevisionAVR und habe ein paar kurze Fragen: 1. Muss ich zwangsläufig meine umständliche Integer-zu-Char-Umwandlung benutzen, um Int-Werte z.B. vom Temperatursensor auf einem LCD auszugeben? Es gibt ja nur String- und Char-Output-Befehle.. Habe nämlich Schwierigkeiten mit meiner Lösung, die ich bei einer einfachen Sekundenanzeige benutzt habe (nur zum Testen), hier kurz das main (Kommentare waren für Azubi-Kollegen): while (1) { sekunden++; //Sekündliche Erhöhung von sekunden um 1 delay_ms(1000); x=1; //Zählvariablen für die Umrechnung von i=0; //Int zu Char (String) werden initialisiert j=0; while(sekunden>=x) //Umrechnung von sekunden (Int) in zeit[] (Char-Array) { zeit[i]=((sekunden/x)%10)+0x30; //Jede einzelne Stelle der Integer-Variable wird mit //Hex-30 addiert, denn laut ASCII-Tabelle liegt | |||
| 19 - DMX-Empfangs-Programm für AVR -- DMX-Empfangs-Programm für AVR | |||
| also, bevor ich jetzt tausendmal nachfrage, poste ich doch einfach mal den programmtext, und du kannst dann ja mal das nötige verändern. falls du da die zeit zu hast $baud = 250000 On Urxc Rx_sub Enable Serial Declare Sub Get_byte '******************************************************************************* Config Lcdpin = Pin , Db4 = Porta.0 , Db5 = Porta.1 , Db6 = Porta.2 , Db7 = Porta.3 , E = Porta.6 , Rs = Porta.4 Config Lcd = 16 * 2 Cls Cursor Off '******************************************************************************* Do 'hier soll erstmal nur der wert des eingestellten dmx-kanals in eine varible geschrieben werden! Loop '******************************************************************************* $asm Get_byte: ' das unterprogramm aus dem ASM-Listing ' inc dmx_countL mußt du als inc r22 schreiben ' so wie es in den .def steht ' also die Namen gegen die Register tauschen ' 8515 mit 8MHz .include "8515def.inc" .equ Channels_all = 1 ... |
|
Zum Ersatzteileshop Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation! gerechnet auf die letzten 30 Tage haben wir 7 Beiträge im Durchschnitt pro Tag heute wurden bisher 0 Beiträge verfasst 12 Besucher in den letzten 60 Sekunden alle 5.00 Sekunden ein neuer Besucher ---- logout ----su ---- logout ---- |