- 3D-Druck Einstieg und Tipps         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 23

Thema: ADS1211 mit AtMega128 Kommunikationsproblem

  1. #11
    Neuer Benutzer Öfters hier
    Registriert seit
    15.01.2009
    Ort
    Dietlikon
    Alter
    33
    Beiträge
    11
    Anzeige

    Praxistest und DIY Projekte
    Ich habe nun mein Program so abgeändert, dass zuerst wie schon vorhin die ersten 8 bits ins INSR geschrieben werden, dann jedoch SPI disabled wird, MISO und MOSI auf Eingang schaltet und die Taktsignale von mir direkt softwaremässig erzeugt werden. Die "Antwort" auf MISO sieht schon anders aus...
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken 2010-08-17_233722.jpg  

  2. #12
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Versuche doch mal in dieses Command Register 3 zu schreiben, so das MISO funktioniert.
    Dann könntest du alles über SPI machen.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  3. #13
    Neuer Benutzer Öfters hier
    Registriert seit
    15.01.2009
    Ort
    Dietlikon
    Alter
    33
    Beiträge
    11
    Hat leider nichts gebracht, die Bilder des Oszilloskop sind die gleichen. Könnte es sein, dass der Chip kaputt ist? Gibt es eine simple Methode, dies herauszufinden?

  4. #14
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Ich glaube nicht das der Chip so leicht zum kaputt machen ist. Es werden nur ein paar doofe Einstellungen sein warum es nicht geht.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  5. #15
    Neuer Benutzer Öfters hier
    Registriert seit
    15.01.2009
    Ort
    Dietlikon
    Alter
    33
    Beiträge
    11
    Hoffentlich genug teuer war er ja...
    Bin nur langsam am verzweifeln, da ich etwa schon seit eine Woche versuche, das Ding zum laufen zu bekommen
    Merkwürdig kommt mir allerdings vor, dass SDIO und SDOUT die Taktsignale von SCK mit aufsteigender Voltzahl "mitmachen", ist das Normal? (ich habe es auf dem Bild rot markiert)
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken bitmap.jpg  

  6. #16
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Sieht etwas eigenartig aus, im korrekten Betrieb würde es wahrscheinlich komplett untergehen.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  7. #17
    Moderator Roboter Genie
    Registriert seit
    26.08.2004
    Beiträge
    1.228
    Hallo!
    Ich denke das es einfacher ginge, wenn du deinen Schaltplan und dein Programm posten würdest. Ansonsten stochert jeder nur im Nebel herum.

    Gruß
    Basti

  8. #18
    Neuer Benutzer Öfters hier
    Registriert seit
    15.01.2009
    Ort
    Dietlikon
    Alter
    33
    Beiträge
    11
    Tut mir leid, dass ich so lange nicht geantwortet habe, hatte soeben Prüfungen an der ETH.
    Ich habe mal einen Versuch unternommen, einen Schaltplan zu zeichen, ich hoffe er ist genug klar, auch wenn mir bewusst ist, dass es eindeutig besser gehen würde
    Das Program wird auf einem ArduinoMega ausgeführt und ist dementsprechend minimal anders als C

    Code:
    #include <avr/io.h>
    
    
    uint8_t data[] = {0,0,0};
    
    void SPI_init(void)
    { 
      DDRB = ((1<<DDB2)|(1<<DDB1)|(1<<DDB0));  //spi pins on port b MOSI SCK,SS outputs 
      SPCR = ((1<<SPE)|(1<<MSTR)|(1<<SPR1));  // SPI enable, Master, f/64
    } 
    
    
    
    uint8_t SPI_Transmit(uint8_t cData)
    { 
       SPDR = cData; 
       while(!(SPSR & (1<<SPIF))) 
          ; 
       return SPDR; 
    }
    
    uint8_t SPI_receive()
    {
        SPCR &= ~(1 << SPE); //disable SPI
        DDRB |= ( 1 << DDB1); //set clock to output
        DDRB &= ~(1 << DDB2); //set MISO & MOSI to input
        DDRB &= ~(1 << DDB3);
         
        PORTB |= (1 << PB1); //generate 8 cycles on SCK
        delayMicroseconds(2);
        PORTB &= ~(1 << PB1);
        delayMicroseconds(2);
        PORTB |= (1 << PB1);
        delayMicroseconds(2);
        PORTB &= ~(1 << PB1);
        delayMicroseconds(2);
        PORTB |= (1 << PB1);
        delayMicroseconds(2);
        PORTB &= ~(1 << PB1);
        delayMicroseconds(2);
        PORTB |= (1 << PB1);
        delayMicroseconds(2);
        PORTB &= ~(1 << PB1);
        delayMicroseconds(2);
        PORTB |= (1 << PB1);
        delayMicroseconds(2);
        PORTB &= ~(1 << PB1);
        delayMicroseconds(2);
        PORTB |= (1 << PB1);
        delayMicroseconds(2);
        PORTB &= ~(1 << PB1);
        delayMicroseconds(2);
        PORTB |= (1 << PB1);
        delayMicroseconds(2);
        PORTB &= ~(1 << PB1);
        delayMicroseconds(2);
        PORTB |= (1 << PB1);
        delayMicroseconds(2);
        PORTB &= ~(1 << PB1);
       
       SPI_init(); //initialise SPI again
       
      return SPDR; //only formal (for later use)
      
    }
    
    void ADS1211_receive()
    {
      delayMicroseconds(10);
      SPI_Transmit(B00000100); //send INSR: write 1 Byte to Command Register Byte 3 (MSB)
      delayMicroseconds(5);
      SPI_Transmit(B01000010);//send Data: everything default except SDL = 1
      delayMicroseconds(5);
      SPI_Transmit(B10000100);//send INSR: read 1 Byte (Command Register Byte 3 (MSB))
      delayMicroseconds(5);
      data[0] = SPI_receive();//receive, expecting B01000010
    }
    
    void setup()
    {
      Serial.begin(9600);
      Serial.write("starting up..."); //say hello
      
       DDRL &= ~( 1 << DDL1 ); //set DL1 to input pin for DRDY
       SPI_init(); //initialise SPI
       delay(1000);
    }
    
    void loop()
    { 
     ADS1211_receive();
     delayMicroseconds(20);
     delay(2);
    }
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken schaltplan_646.png  

  9. #19
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Ob da für SPI alles richtig konfiguriert wird, kann ich nicht sagen, kenne den Arduino nicht.
    Deine Binär-Schreibweise im Receive stört mich allerdings, ich schreibe immer (0b00000100), vielleicht ist der Arduino Compiler grosszügig.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  10. #20
    Neuer Benutzer Öfters hier
    Registriert seit
    15.01.2009
    Ort
    Dietlikon
    Alter
    33
    Beiträge
    11
    Eigentlich ist Arduino nur eine "Bibliothek", die ein paar Sachen erleichtert, jedoch kann ganz normaler C - Code eingefügt werden. Die SPI - Routinen kann man exakt so auch mit dem GCC kompilieren lassen. Leider funktioniert 0b00000100 oder auch 0x00000100 nicht, Arduino hat es lieber, wenn man B00000100 schreibt . Übrigens nutzt Arduino intern den gcc, er baut vorher den Code einfach ein bisschen um...

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad