um welchen AVR handelt es sich denn?
Hi zusammen,
Ich hab gerad meinen LCD-Screen angeschloßen und wollte mit Peter Fleurys LCD-Libary das ganze mal testen.
Der Code is der folgende:
Nur es passiert nixCode:#include <inttypes.h> #include <avr/io.h> #include <LCD/lcd.h> #include <LCD/lcd.c> #define Pin1 0 #define Pin2 1 #define Pin3 2 #define Pin4 3 #define Pin5 4 #define Pin6 5 #define Pin7 6 #define Pin8 7 #define XTAL 8000000 #define LCD_PORT PORTC #define LCD_DATA0_PORT LCD_PORT #define LCD_DATA1_PORT LCD_PORT #define LCD_DATA2_PORT LCD_PORT #define LCD_DATA3_PORT LCD_PORT #define LCD_RS_PORT LCD_PORT #define LCD_RW_PORT LCD_PORT #define LCD_E_PORT LCD_PORT #define LCD_DATA0_PIN Pin1 #define LCD_DATA1_PIN Pin2 #define LCD_DATA2_PIN Pin3 #define LCD_DATA3_PIN Pin4 #define LCD_RS_PIN Pin5 #define LCD_E_PIN Pin6 #define LCD_RW_PIN Pin7 int main (void) { DDRB = 0x00; PORTB = ~( (1 << Pin1) | (1 << Pin2) ); lcd_init(LCD_DISP_ON); lcd_puts("Hello World :-)"); while (1) {} }
Daher hab ich mal alle Befehle, sowie die includes für die Libary ausgeklammert, denn dann müssten zumindest die an PortB angeschloßenen LEDs leuchten.
Dem ist jedoch nicht so...
Aber davor kommen doch gar keine Befehle ?! Der kann doch nicht bei den #define-Befehlen abstürzen?!
Alternativ hab ich nen kleines Programm für LED-Ansteuerung auf den µC geladen und da leuchteten die LED's...
Also falsche Verkablung oder so könnte zwar daran Schuld sein, dass das LCD nicht arbeitet, aber dann müssten zumindest die LEDs leuchten...
Was tun?
ThxInAdv
Alex
um welchen AVR handelt es sich denn?
Ein ATmega16 mit 8 Mhz...
hast du das JTAG deaktiviert?
das gibts ab dem ATMEGA16, liegt am Port C und ist standartmäßig aktiviert
wenn man nun was daran anschließt, kann man machen, was man will, der Port macht, was er will...
also entweder schließt du das an einen anderen Port an oder deaktivierst das JTAG-Interface(per Software(steht im Datenblatt, wie) oder per Fusebits)
Hmm, also bei JTAGEN war tatsächlich ein Häckchen...dieses hab ich jetzt entfernt...
Aber geändert hat sich nichts
geht es wenn du einen anderen Port nimmst? Würde PortB vorschlagen.
Hast du mal die Frequenz überprüft? Passiert denn überhaupt was auf den Ports?
Was meinst du mit Frequenz?
Und was sollte ich denn wo messen können?
Hi zusammen,
da ich nix traue, was ich nicht selber geschrieben habe, hab ich versucht, mithilfe der LCD-Schilderung von www.mc-project.de selber das LCD anzuwerfen:
Klappt auch ohne Probleme, nur beim letzen Übermitteln setze ich RS auf hi, damit der das als Schriftzeichen interpretieren soll.Code:#include <inttypes.h> #include <avr/io.h> #define Pin1 0 #define Pin2 1 #define Pin3 2 #define Pin4 3 #define Pin5 4 #define Pin6 5 #define Pin7 6 #define Pin8 7 #define DataPin1 Pin1 #define DataPin2 Pin2 #define DataPin3 Pin3 #define DataPin4 Pin4 #define PinRS Pin5 #define PinE Pin6 #define PinRW Pin7 void delay(int ms) { int i,j; for (i = 0; i < ms; i++) for(j = 0; j < 8000; j++) asm volatile ("nop"); } void toggle_e(void) { PORTC |= (1 << PinE); asm volatile ("rjmp 1f\n 1:"); PORTC &= ~(1 << PinE); } void waitWhileBusy(void) { DDRC |= ~(1 << DataPin4); PORTC |= ( (1 << PinRW) | (1 << PinE) ); while ( ( PINC & (1 << DataPin4) ) ) asm volatile ("nop"); DDRC &= (1 << DataPin4); PORTC &= ~( (1 << PinRW) | (1 << PinE) ); } int main (void) { DDRB = 0xFF; PORTB = ~( (1 << Pin1) ); DDRC = 0xFF; PORTC = 0x00; delay(17); PORTC = (1 << DataPin2) | (1 << DataPin1); toggle_e(); delay(5); toggle_e(); delay(1); toggle_e(); delay(2); PORTC = (1 << DataPin1); toggle_e(); PORTC = (1 << DataPin2); toggle_e(); PORTC = (1 << DataPin4); toggle_e(); delay(5); PORTB = ~( (1 << Pin1) | (1 << Pin2) ); PORTC= 0x00; PORTC = 0x00; toggle_e(); PORTC = (1 << DataPin4); toggle_e(); delay(5); PORTC= 0x00; PORTC = 0x00; toggle_e(); PORTC = ( (1 << DataPin4) | (1 << DataPin3) ); toggle_e(); delay(5); PORTC= (1 << PinRS); PORTC |= ( (1 << DataPin4) | (1 << DataPin3) ); toggle_e(); PORTC |= ( (1 << DataPin4) | (1 << DataPin3) ); toggle_e(); PORTB = ~(1 << Pin2); while (1) {} }
Aber das Display bleibt leer
Die LEDs arbeiten aber sauber...
Was mich verwundert ist, dass das Programm hängenbleibt, sobald ich die Prozedur waitWhileBusy aufrufe, daher hab ich jetzt alles mit delays gelöst...
Vllt stimmt was mit dem RW Kabel nicht oder so - das würde zumindest erklären, warum die Libary immer hängen blieb....
Aber richtig zufriedenstelllend is dieses Zwischenergebnis nun auch nicht...
Any Vorschläge?
Bye
Alex
dieses hasse ich an c: eine verfluchte, komplizierte, verdammte, zum haare raufen, herzinfarktproduzierende, ärgerniserregende sch..ße.
nicht mal ein stinknormales display bekommt ein anfänger damit zu laufen. es ist zum kotzen. soviele titel gibt es schon und alle haben das perfekte ansprechen eines display noch nicht geschafft. sind die alle zu blöde, nein, es liegt an c. für mich gibt es kein ärger mehr, ich habe ein haus, ein pferd und natürlich "bascom", einfach und fast problemlos.
mfg pebisoft
Meiner Meinung nach is C genial.
Ich kann mir nicht vorstellen, dass jmd, der mit basic mit 2-3 Befehlen nen funzendes LCD zusammenbastelt auch nur die geringste Ahnung davon hat, wie die Kommunikation zwischen dem Display und dem µC funktioniert.
Das is genauso wie die Leute die die mit VisualBasic coden... Das is doch keine richtige Sprache mehr.
Meine Meinung ist, dass Basic für die Leute gut is, die keine Zeit haben, sich mit sowas zu beschäftigen, oder grundsätzlich kein gutes Verständnis für Informatik haben...
Übrigens ist nicht die Kommunikation mit C schwierig, sondern grundsätzlich die Kommunikation - Wenn du mit Bascom die passenden Pins an und ausschaltest und dadurch auch die HexCodes überträgst, is das auch nicht wirklich einfacher als mit C.
Ich persönlich hab's nun schon geschafft Zeichen auszugeben und zwar nachdem ich 2 mal den kompletten Code verworfen habe
Resultierend kann ich sagen, dass ich dadurch einen riesigen Lerneffekt erfahren habe und ich würd sicher auch noch schöne Output Prozeduren hinkriegen, wenn ich nicht meinen µC geschrottet hätte
Welche Sprache man wählt liegt doch nur an den Interessengebieten - wer sich lieber mit mechanischen Feinarbeiten am Bot rumschlägt und die Sprache vernachlässigt, für den is Bascom sicher das Richtige...
btw, verwende auch wenn du wütend bist vllt ein paar Linefeeds und groß/KLEINschreibung - macht die Texte doch ein wenig lesbarer...
My 2 Cents
Lesezeichen