- 3D-Druck Einstieg und Tipps         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 22

Thema: LCD will nicht :(

  1. #1

    LCD will nicht :(

    Anzeige

    LiFePo4 Akku selber bauen - Video
    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:
    Code:
    #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) {}
     }
    Nur es passiert nix
    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

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.08.2004
    Ort
    Großbardorf
    Alter
    37
    Beiträge
    674
    um welchen AVR handelt es sich denn?

  3. #3
    Ein ATmega16 mit 8 Mhz...

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.08.2004
    Ort
    Großbardorf
    Alter
    37
    Beiträge
    674
    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)

  5. #5
    Hmm, also bei JTAGEN war tatsächlich ein Häckchen...dieses hab ich jetzt entfernt...
    Aber geändert hat sich nichts

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.11.2004
    Ort
    Karlsruhe
    Beiträge
    223
    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?

  7. #7
    Was meinst du mit Frequenz?
    Und was sollte ich denn wo messen können?

  8. #8
    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:
    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) {}
     }
    Klappt auch ohne Probleme, nur beim letzen Übermitteln setze ich RS auf hi, damit der das als Schriftzeichen interpretieren soll.
    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

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    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

  10. #10
    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

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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

12V Akku bauen