-         

Ergebnis 1 bis 9 von 9

Thema: Problem mit SRF02

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    30.01.2008
    Alter
    24
    Beiträge
    44

    Problem mit SRF02

    Anzeige

    Hi,
    mein Programm in cc für den Atmega128 hängt sich bei "I2C_Start();" auf, eigendlich sollte es den Wert vom SRF02 im EEProm speichern und am LCD ausgeben. Der Kompiler findet keine Fehler.





    int WERT1, WERT2;
    char zeile1[12], zeile2[12];

    void main(void)
    {
    word address;
    byte data,EEPROM_data;
    address=0x20;
    data=0x42;


    I2C_Init(I2C_100kHz); //I2C-Schnittstelle wird initialisiert


    LCD_Init();
    LCD_ClearLCD(); //Displayinhalt löschen
    LCD_CursorOff(); //Display Cursur ausschalten

    zeile1 = "Zentim."; //zeile1 bedeutet Zentim.
    LCD_CursorPos(0); //Position von Zeile1
    LCD_WriteText(zeile1); //Jez ausgeben





    while (true) //Unendlichschleife

    {



    I2C_Start(); //I2C starten...
    I2C_Write(0xE0); //...und zwar im Schreibmodus EO(224=11100000)
    I2C_Write(0x51); //Ausgabe in cm
    AbsDelay(100); //Verschnaufpause (er braucht 67ms, ich geb ///ihm 100)
    I2C_Stop(); //I2C stoppen
    AbsDelay(5); //Pause für EEprom


    I2C_Start(); // I2C starten...
    I2C_Write(0xE0);
    I2C_Write(address>>;
    I2C_Write(address);
    I2C_Start(); // I2C neustarten...


    I2C_Write(0xE1); // ...jetzt aber im Lesemodus E1(225=11100001)

    //Der Wert1 wirdgelesen...
    WERT1=I2C_Read_ACK(); //...und mit einem ACK gespickt.
    EEPROM_data=I2C_Read_ACK(); //...und abgespeichert

    //Der Wert2 wirdgelesen...
    WERT2=I2C_Read_NACK(); //...und mit einem NACK gespickt.


    I2C_Stop(); //I2C wird angehalten

    Msg_WriteHex(EEPROM_data); //Den Wert im EEprom als /
    //Hexadezimale Zahl abspeichern


    Str_WriteInt(WERT1, zeile2, 0x40); //...Schreib in die 2.Zeile W1
    LCD_CursorPos(0x40); //In Zeile2

    Str_WriteInt(WERT2, zeile2, 0x40+;//...Schreib in die 2.Zeile W2
    LCD_CursorPos(0x40+; //In Zeile2 in die mitte

    AbsDelay(1000); //Nach einer Sekunde springt das Programm
    // zur Zur Zeile "while (true)" zurück
    }

    }


    Hat jemand ne Ahnung was ich machen kann, da das Programm bereits beim I2C_Bus starten aufgibt, handelt es sich eher um einen Hardwearfehler, das Board un der Sensor sind fehlerfrei. Wie aktiviert man eigendlich die Pullupwiderstände des Chips?

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    30.01.2008
    Alter
    24
    Beiträge
    44
    Dia smilies hat der HTMLcoder gemacht, Smilie="8 )"

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    30.01.2008
    Alter
    24
    Beiträge
    44
    Hat sich schon...

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    30.01.2008
    Alter
    24
    Beiträge
    44
    .. hab vergessen die Pull up widerstände zu aktivieren (siehe Forum "pull-up-widerstände aktivieren(ATmega12")

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    30.01.2008
    Alter
    24
    Beiträge
    44
    Bei mir will der SRF nicht so richtig; ich schreibe ihm die Adresse, das Register, den Befehl aber ich bring ihn nicht mal zum messen... Hat überhaupt schon mal jemand gepack, einen Baustein der c-control pro serie mit einem SRF (über I2C, nicht die Sensoren die über PWM funktionieren) zum messen zu bringen?
    Freu mich über JEDEN Tipp

    Gruß

    Tenorm

  6. #6
    Hallo!
    Ich würd mal sagen du nach dem 0xE0 noch ein 0x00 schickst bevor du das 0x51 sendest. Also sende mal:
    0xE0
    0x00
    0x51

    Dann kommt auch was an!
    LG
    Flo

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    30.01.2008
    Alter
    24
    Beiträge
    44
    Alles schon ausprobiert, aber trotzdem danke. Das Programm oben ist schon veraltet...

    Sonst noch Ideen

    Tenorm

  8. #8
    Hallo!
    Kannst mal den neuen Code posten!
    Wenn du ein Scope hast, kannst mal nachschauen ob die beiden Signale SDaA und SCL so kommen wie sie kommen sollen?

    Bis denne
    Flo

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    30.01.2008
    Alter
    24
    Beiträge
    44
    Danke Flo,

    ich hab zwar kein SCOPE,
    aber hier ist mein CODE:

    void main(void)
    {
    I2C_Init(I2C_100kHz); // I2C-Schnittstelle mit 100kHz initialisieren

    Port_Write(24,1); // Pullup an Port D0 ein
    Port_Write(25,1); // Pullup an Port D1 ein

    while(true)
    {
    I2C_Start();
    I2C_Write(0xE0); // Adresse
    I2C_Write(0x00); // Register
    I2C_Write(0x51); // Befehl
    }
    }

    TENORM

Berechtigungen

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