- Labornetzteil AliExpress         
Seite 18 von 19 ErsteErste ... 816171819 LetzteLetzte
Ergebnis 171 bis 180 von 183

Thema: Problem Beim Programmieren vom LCD

  1. #171
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.12.2006
    Ort
    Saarland
    Alter
    44
    Beiträge
    314
    Anzeige

    E-Bike
    Wenn ichs so schreibe schreibt ers richtig
    Code:
    #include <avr/io.h>
    #include "i2cmaster.h"
    #include "asuro.h"
    
    #define Display   0x74      // device address of Display, see datasheet
    
    
    int main(void)
    {
       int ret=0;
       Init();
       i2c_init();
    
       ret = i2c_start(Display+I2C_WRITE);
       if ( ret )
          {
          i2c_stop();
          StatusLED(RED);
          while(1);
          }
       Msleep(200);
       i2c_write(0x00);
       Msleep(200);
       i2c_write(0x01);
       Msleep(200);
       i2c_write(0x2E);
       Msleep(200);
       i2c_write(0x0F);
       Msleep(1000);
       i2c_write(0x06);
       Msleep(200); 
       i2c_stop();
       ret = i2c_start(Display+I2C_WRITE);
       if ( ret )
          {
          i2c_stop();
          StatusLED(RED);
          while(1);
          }
       Msleep(200);
       i2c_write(0x40); //Kontroll Byte
       Msleep(200);
       i2c_write(0xA0); //leer
       Msleep(200);
       i2c_write(0xC9); //I
       Msleep(200);
       i2c_write(0xA0); //leer
       Msleep(200);
       i2c_write(0xEC); //l
       Msleep(200);
       i2c_write(0xEF); //o
       Msleep(200);
       i2c_write(0xD6); //V
       Msleep(200);
       i2c_write(0xC5); //E
       Msleep(200);
       i2c_write(0xA0); //leer
       Msleep(200);
       i2c_write(0xD9); //Y
       Msleep(200);
       i2c_write(0xEF); //o
       Msleep(200);
       i2c_write(0xD5); //U
       Msleep(200);
       i2c_write(0xA0); //leer
       Msleep(200);
       i2c_write(0xA0); //leer
       Msleep(200);
       i2c_write(0xA0); //leer
       Msleep(200);
       i2c_write(0xA0); //leer
       Msleep(200);
       i2c_write(0xA0); //leer
       Msleep(200);
       i2c_write(0xA0); //leer
       Msleep(200);
       i2c_write(0xA0); //leer
       Msleep(200);
       i2c_write(0xA0); //leer
       Msleep(200);
       i2c_write(0xA0); //leer
       Msleep(200);
       i2c_write(0xA0); //leer
       Msleep(200);
       i2c_write(0xA0); //leer
       Msleep(200);
       i2c_write(0xC1); //A
       Msleep(200);
       i2c_write(0xCE); //N
       Msleep(200);
       i2c_write(0xC4); //D
       Msleep(200);
       i2c_write(0xA0); //leer
       Msleep(200);
       i2c_write(0xCD); //M
       Msleep(200);
       i2c_write(0xC9); //I
       Msleep(200);
       i2c_write(0xCB); //K
       Msleep(200);
       i2c_write(0xC1); //A
       Msleep(200);
       i2c_write(0xC1); //A
       Msleep(200);
       
    
       while(1);
       
    
      return 0;
    }

  2. #172
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.066
    wie richtig? in 2 zeilen?
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  3. #173
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.12.2006
    Ort
    Saarland
    Alter
    44
    Beiträge
    314
    jo in 2 zeilen


    ---------------------------------
    15 zeichen schreiben^^

  4. #174
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.066
    hmm... naja dann würde ich sagen lass es erstmal so. ich hab noch ein wenig gesucht im datenblatt und hab folgendes gefunden:
    das control byte (was nach dem i2c_start gesendet wird) besagt dass ab jetzt nur noch daten kommen, also zeichen die angezeigt werden sollen.
    wenn man einen befehl senden will, zB um in die nächste zeile zu springen, dann muss man folgendes tun:
    die initialisierung bleibt die gleiche. das control byte wird verändert, es wird dann ein anderer wert gesendet. das display weiss dann, dass ab jetzt immer abwechselnd zwei datenbytes und dann ein neues control byte oder ein befehl kommt. man muss also immer nach 2 zeichen ein entsprechendes control byte senden. das wäre dann so: "I " (control byte) "Lo" (CB) "ve" (CB) " Y" (CB) "ou" (befehl zum zeilenwechsel) (control byte) "An" (CB) "d " und so weiter. es werden also immer zwei bytes die gesendet wurden angezeigt, beim dritten wird geschaut obs ein befehl ist oder wieder ein control byte. sehr umständlich, ich glaube ich würde mit den leerzeichen leben...
    falls irgend jemand das aus dem datenblatt anders rausfindet, bitte posten, kann gut sein dass ich mich getäuscht hab. ist schon sehr umständlich so.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  5. #175
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.12.2006
    Ort
    Saarland
    Alter
    44
    Beiträge
    314
    wenn ich bei jedem die 10 leerzeichen rein mache funktionierts auch mit 3 zeilen ich glaube aber es brauchen nur 9 leere zeilen (sagen wir unterschiedlich kommt halt darauf an wo genau das ende ist schliesst ja nicht immer mit der zeile ab) thx Damaltor. Ich nehme einfach die kürzesete zeit bei den leerzeichen funktioniert dann hervoragend. Hätte ich Meine Digicam würde ich ein bild posten kommt aber erst morgen wieder nach hause^^

  6. #176
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.066
    du kannst allgemein alle msleeps auf 3 millisekunden verkürzen (Msleep(3).
    die längste anweisung des displays dauert glaube ich 2,1 millisekunden (Display clear) und zum "booten" hat das display genug zeit während der bootloader des asuro arbeitet.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  7. #177
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.12.2006
    Ort
    Saarland
    Alter
    44
    Beiträge
    314
    So habe es auf 3 ms verkürtzt es funktioniert boar hammer soooooo schnell kann ich gar nicht schauen^^. Jetzt ne andere frage den asuro über odometrie laufen zu lassen ist kein problem oder? Es gibt ja noch ne while(1); einfach da die daten rein schreiben und fertig oder?

  8. #178
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.066
    wie jetz... dass er erst was ausgibt und dann fährt? häng einfach alles ans ende dran... sieh einfach alles was zum display gehört als eine funktion und arbeite damit als wenn es nur eine einzelne anweisung wäre.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  9. #179
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.12.2006
    Ort
    Saarland
    Alter
    44
    Beiträge
    314
    jo stimmt vergass sorry die 3 ms sind ja blitzartig verstrichen das es eigendlich direkt los geht^^

    Code:
    #include <avr/io.h>
    #include "i2cmaster.h"
    #include "asuro.h"
    
    #define Display   0x74      // device address of Display, see datasheet
    #define aus MotorDir(BREAK,BREAK)
    #define go {MotorSpeed(150,150);MotorDir(FWD,FWD);}
    #define backturn { MotorSpeed(150,250);MotorDir(RWD,RWD);Msleep(1000);} 
    
    	int speed()
    {
       int rightspeed,leftspeed;
       int leftold,rightold;
    
       Encoder_Set(0,0);      // reset encoder
    
    
       leftold=encoder[LEFT];
       rightold=encoder[RIGHT];
       Msleep(300);
       leftspeed=encoder[LEFT]-leftold;
       rightspeed=encoder[RIGHT]-rightold;
    
       //SerWrite("  speed Left,Right ",19);
       //PrintInt(leftspeed);
       //PrintInt(rightspeed);
       return leftspeed+rightspeed;
    }
    
    
    
    int main(void)
    {
       int n,v,nullspeed;
       int ret=0;
       Init();
       BackLED(ON,ON);
       i2c_init();
    
       ret = i2c_start(Display+I2C_WRITE);
       if ( ret )
          {
          i2c_stop();
          StatusLED(RED);
          while(1);
          }
       Msleep(3);
       i2c_write(0x00);
       Msleep(3);
       i2c_write(0x01);
       Msleep(3);
       i2c_write(0x2E);
       Msleep(3);
       i2c_write(0x0F);
       Msleep(3);
       i2c_write(0x06);
       Msleep(3);
       i2c_stop();
       ret = i2c_start(Display+I2C_WRITE);
       if ( ret )
          {
          i2c_stop();
          StatusLED(RED);
    	  while(1);
    	  }
       Msleep(3);
       i2c_write(0x40); //Kontroll Byte
       Msleep(3);
       i2c_write(0xA0); //leer
       Msleep(3);
       i2c_write(0xC8); //H
       Msleep(3);
       i2c_write(0xC5); //E
       Msleep(3);
       i2c_write(0xCC); //L
       Msleep(3);
       i2c_write(0xCC); //L
       Msleep(3);
       i2c_write(0xCF); //O
       Msleep(3);
       i2c_write(0xA0); //leer
       Msleep(3);
       i2c_write(0xC9); //I
       Msleep(3);
       i2c_write(0xA7); //´
       Msleep(3);
       i2c_write(0xCD); //M
       Msleep(3);
       i2c_write(0xA0); //leer
       Msleep(3);
       i2c_write(0xA0); //leer
       Msleep(3);
       i2c_write(0xA0); //leer
       Msleep(3);
       i2c_write(0xA0); //leer
       Msleep(3);
       i2c_write(0xA0); //leer
       Msleep(3);
       i2c_write(0xA0); //leer
       Msleep(3);
       i2c_write(0xA0); //leer
       Msleep(3);
       i2c_write(0xA0); //leer
       Msleep(3);
       i2c_write(0xA0); //leer
       Msleep(3);
       i2c_write(0xA0); //leer
       Msleep(3);
       i2c_write(0xA0); //leer
       Msleep(3);
       i2c_write(0xC1); //A
       Msleep(3);
       i2c_write(0xD3); //S
       Msleep(3);
       i2c_write(0xD5); //U
       Msleep(3);
       i2c_write(0xD2); //R
       Msleep(3);
       i2c_write(0xCF); //O
       Msleep(3);
       i2c_write(0xA0); //leer
       Msleep(3);
       i2c_write(0xC3); //C
       Msleep(3);
       i2c_write(0xD2); //R
       Msleep(3);
       i2c_write(0xC5); //E
       Msleep(3);
       i2c_write(0xC1); //A
       Msleep(3);
       i2c_write(0xD4); //T
       Msleep(3);
       i2c_write(0xC5); //E
       Msleep(3);
       i2c_write(0xC4); //D
       Msleep(3);
       i2c_write(0xA0); //leer
       Msleep(3);
       i2c_write(0xA0); //leer
       Msleep(3);
       i2c_write(0xA0); //leer
       Msleep(3);
       i2c_write(0xA0); //leer
       Msleep(3);
       i2c_write(0xA0); //leer
       Msleep(3);
       i2c_write(0xA0); //leer
       Msleep(3);
       i2c_write(0xA0); //leer
       Msleep(3);
       i2c_write(0xA0); //leer
       Msleep(3);
       i2c_write(0xC2); //B
       Msleep(3);
       i2c_write(0xD9); //Y
       Msleep(3);
       i2c_write(0x2E); //>
       Msleep(3);
       i2c_write(0xC4); //D
       Msleep(3);
       i2c_write(0xC1); //A
       Msleep(3);
       i2c_write(0xCE); //N
       Msleep(3);
       i2c_write(0xCA); //J
       Msleep(3);
       i2c_write(0xCF); //O
       Msleep(3);
       i2c_write(0x2F); //<
       Msleep(3);
       i2c_write(0x2F); //<
       Msleep(3);
       
       
    Encoder_Init();
       StatusLED(OFF);
       SerWrite("\n\rASURO OK\n\r",8);
    
       go;
       Msleep(500);
    
       nullspeed=speed()-10;
    
       while(1)
       {
          v=speed();
          SerWrite("\n\r speed ",9);
          PrintInt(v);
    
          if(v<nullspeed)
          {
             backturn;
             go;
             Msleep(500);
          }
    
       }
       return 0;
    }
    so funktioniert alles. war nur für test zwecke

  10. #180
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.11.2006
    Ort
    Hamburg
    Alter
    35
    Beiträge
    184
    Hi Dalmator,

    kannst du vllt die Library die ich für danjoo geschrieben habe korrigieren, sodass es funktioniert? Ich kann nämlich nicht testen
    Gruß Raid

    Der ^^ Mann

Seite 18 von 19 ErsteErste ... 816171819 LetzteLetzte

Berechtigungen

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

12V Akku bauen