- Labornetzteil AliExpress         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 30

Thema: SRF08 - nur eine Messung

  1. #11
    Benutzer Stammmitglied
    Registriert seit
    09.06.2004
    Beiträge
    34
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hi Jörg,

    Ich benütze auch des HCS12 mit SRF08. Hab auch viele Probleme gehabt es problemlos laufen zu bringen. Benützt du des eingebaute IIC Modul? Mit interrupts oder gepollt?

    Wie bemerket, es ist wichtig ein „common ground“ zu haben. Gibt es ein grund warum du nicht ein einziges power supply benützt

  2. #12
    Hallo glowbrain1,

    ich benutze das eingebaute IIC-Modul auf dem HCS12. Ich benutze keine Interrupts sondern polle. Wie ich schon oben erwähnt habe versuche ich ja auf eine einzige Masseleitung zu kommen, wo es dann genau nicht funktioniert.
    Wo liegt also der Fehler?
    Da du ja diese Probleme schon behoben hast, kannst du mir vielleicht deinen Aufbau beschreiben und vielleicht mal deinen Code geben.
    Mein Aufbau ist zur Zeit: das ich das interne Modul benutze das auf die beiden externen Pinreihen rausgeführt wird. Beim mir ist es die X5-Reihe und zwar die Pins 47(SDA) und 48(SCL), als Stromversorgung versuche ich zur Zeit die ebenfalls herrausgeführte Pins zu nutzen (wäre direkt darunter Pin 49 (VCC) und Pin 50 (GND)). Was dann auch die vorgeschriebene gemeinsame Masse haben sollte. Bei mir gehen also 4 Kabel von SRF08 Modul direkt zum HCS12.

    Schönen Gruß an alle

    Marc

  3. #13
    Benutzer Stammmitglied
    Registriert seit
    09.06.2004
    Beiträge
    34
    Hab V+ = 5v, und 2KOhm wiederstand bis SCL u. SDA. Standard SCL/SDA pins (kenn pin nr. nicht auswendig)

    Ein paar Bemerkungen. Zwischen Kommando schreiben, und Register lesen functsionierts besser (überhaubt?) mit restart, nicht Stopp/start (frag nicht warum?). Vorsichtshalber probiere eine grösere delay zwischen messungen.

    Ich hab so viele unregelmesigkeiten zwischen meine (5) iic gerate und hcs12 IIC module gefunden. Zuerst hab ich von interrupt zu polling gegangen. Dan von polling to bitbang an andere pins. Auf jeden fall, solltest ein interrupt driven iic-monitor schreiben, und an die SCL/SDA leitung legen, und dann des outputs analysieren. Ich kann das monitor code posten wenn du willst. Ich gehe davon aus das du C benutzt. Welches compiler?

  4. #14
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.11.2003
    Ort
    Dresden
    Alter
    60
    Beiträge
    409
    Hallo Marc,

    ich habe mir jetzt die Schaltung+Manual von Elmicro heruntergeladen.

    Beim mir ist es die X5-Reihe und zwar die Pins 47(SDA) und 48(SCL), als Stromversorgung versuche ich zur Zeit die ebenfalls herrausgeführte Pins zu nutzen (wäre direkt darunter Pin 49 (VCC) und Pin 50 (GND)). Was dann auch die vorgeschriebene gemeinsame Masse haben sollte. Bei mir gehen also 4 Kabel von SRF08 Modul direkt zum HCS12.
    Muss ehrlich sagen, ich täts genauso anschließen. Wichtig ist, dass das dabei das Controllermodul mit 5V und nicht 3,3V versorgt wird. Die Pullups sind 4,7K also OK.

    Bleibt die Frage, ob der Controller vielleicht zwischendurch auf die RTC zugreift (ausgelöst durch Interrupt) und damit irgendwas abschießt.
    Das erklärt aber alles nicht den "Masse-Effekt".
    Blocke mal spaßeshalber die Versorgungsspannung mit einem kleinen Elko (5-10uF) direkt am Modul ab.

    Zu der Softwaregeschichte kann ich nichts schreiben, da ich die konkrete Implementierung nicht kenne. glowbrain hat Recht, beim Lesezugriff sollte statt stop/start ein "repeated start" gesendet werden. Das ist aber sicherlich nicht die Ursache für das Problem.

    Viele Grüße
    Jörg

  5. #15
    Hallo glowbrain1,

    also wenn ich das richtig verstanden habe verwendest du die 2KOhm als Pin-Up-Widerstand, also von 5V zur SCL und 5V zur SDA. Das mit dem Restart ist klar. Zwischen den Messungen sollte eigentlich kein delay notwendig sein. Natürlich benutze ich C, als Compiler benutze ich zur Zeit die 30 Tage Test Version von ImageCraft IDE for ICC12. Welchen Compiler benutzt du denn. Das mit dem Monitorcode wär super.

    Gruß Marc

  6. #16
    Benutzer Stammmitglied
    Registriert seit
    09.06.2004
    Beiträge
    34
    Ich bin gleich zu GNU gegangen (lieber als nach 30 tage), und bin einigermassen zufrieden, vor allen mit das preis-leistungs verhältniss.

    Das monitor program is einfach genug, so das du die custom defines von metroworks relativ einfach hier austauschen kannst. Es benüzt port-H pins 0&1, und interrupt wird von das relevante edge ge-trigger’t . Es speichert dan MON_SIZE daten. Du kannst entweder zu dien Gelegenheit diesen dumpIICTrace() aufrufen, oder wenn es voll ist, wird’s von alleine gemacht.

    Das output kommt als 2 reihen nuller und einser raus, und kann als primitiver logic-analiser gesehn werden. Mann kann vor allem sehen ob die start-stop und ack Sequenzen so sind wie Mann sich es vorstellt

    Code:
    #define PORT  (*((ptPIM)0x240))
    #define scl PORT.pth.byte & PTH0
    #define sda PORT.pth.byte & PTH1
    
    #define PortHIntVector  (* (unsigned int *)(0x3e4c))
    
    // records old value of portH
    unsigned int porth;
    #define MON_SIZE 200
    tU08 trans[MON_SIZE];
    unsigned int count=0;
    
    
    void PORTH_ISR(void) __attribute__((interrupt));
    
    
    void initIICMonitor(void) 
    {									
    
      // connect ISR's to ports  
      PortHIntVector = (unsigned int)PORTH_ISR;
    
      // set pins 0&1 to input
      PORT.ddrh.byte &= 0xFC;
    
      // initially trigger on falling edge
      PORT.ppsh.byte &= 0xFC;
    
      // clear interrupts on pins
      PORT.pifh.byte |= 0x03;
      // enable interrupts on pins 0&1
      PORT.pieh.byte |= 0x03;
      asm("cli");
    
    }
    
    void dumpIICTrace(){
      int i;
      int c2;
      volatile tU08 oscl = 0;
      volatile tU08 osda = 0;
        
      //enable interrupts
      asm("sei");
      DBug12FNP->printf("iic_bitslave TestPorts:count %d\n\r",count);
      for (c2=0;c2<count;c2++){
        DBug12FNP->printf("%d",trans[c2]&1);
      }      
      DBug12FNP->printf("\n\r");
      for (c2=0;c2<count;c2++){
        DBug12FNP->printf("%d",(trans[c2]&2)>>1);
      }      
      DBug12FNP->printf("\n\r");
      count = 0;
      // disable interrupts
      asm("cli");
    }
    
    void PORTH_ISR(void){
      
      volatile unsigned char lporth;
      lporth = PORT.pth.byte;
      //DBug12FNP->printf("iic_mon : ISR called %x pifh %x old %x\n\r",PORT.pifh.byte,lporth,porth);  
      
      if (count < MON_SIZE){
        trans[count] = lporth;
        if ((lporth&1)==1) {
          // now triger on falling edge
          PORT.ppsh.byte &= 0xFE;
        }else{
          // now triger on raising edge
          PORT.ppsh.byte |= 0x01;
        }
      
        if ((lporth&2)==2) {
          // now triger on falling edge
          PORT.ppsh.byte &= 0xFD;
        }else{
          // now triger on raising edge
          PORT.ppsh.byte |= 0x02;
        }
        count++;
      }
      else{
        DBug12FNP->printf("iic_mon:  buffer overflow\n\r");
        dumpIICTrace();
      }
      // reset interrupts
      // clear interrupts on pins
      if ((PORT.pifh.byte&1)==1) PORT.pifh.byte |= 0x01;  
      if ((PORT.pifh.byte&2)==2) PORT.pifh.byte |= 0x02;  
    }

  7. #17
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.11.2003
    Ort
    Dresden
    Alter
    60
    Beiträge
    409
    Hallo glowbrain1,

    also 2K parallel zu 4,7K macht 1,4K als PullUp was schon arg niedrig ist. Ich glaube auch nicht, dass das die Ursache für das Problem ist.

    BTW, den Monitor finde ich Klasse!

    Viele Grüße
    Jörg

  8. #18
    Gast
    Hallo Jörg,

    hab die Versorgungsspannung mit den Elkos geblockt, habe dann immer noch ein Potential von 1,5 bis 2 Volt. War aber ein 4,7uF Elko, sollte aber auch gehen. Das US-Modul blink dann am Anfang (Adressenblinken) wie erwartet auch nicht mehr.
    Denn HCS betreibe ich natürlich mit 5V.

  9. #19
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.11.2003
    Ort
    Dresden
    Alter
    60
    Beiträge
    409
    Hallo Marc,

    den Elko auch wirklich parallel zur Spannungsversorgung?!

    Das US-Modul blink dann am Anfang (Adressenblinken) wie erwartet auch nicht mehr.
    Frage: Warum wie erwartet und es muss aber blinken!!

    Viele Grüße
    Jörg

  10. #20
    Hallo Jörg,

    habe unter:
    Blocke mal spaßeshalber die Versorgungsspannung...
    wohl etwas anderes verstanden. Wenn ich aber den Elko parallel zur Versorgungsspannung am Modul einbaue, blinkt das Modul wie gewohnt und ich kann keine Messung machen. Wenn ich aber den Elko mit Klaps / Fliegenbeine oder wie auch immer diese Klemmen heißen anschließe geht es wie gewohnt also nur eine Messung. Wahrscheinlich weil der Elko dann nicht mehr direkt am Modul ist sondern 15cm Kabel dazwischen ist.

    Nachtrag:
    Mir ist noch was aufgefallen und zwar kann ich ja genau eine Messung machen, wenn ich aber die Spannung von Modul und HCS12 kurz unterbreche kann ich wieder eine Messung machen. Wenn ich jetzt aber nur den HCS12 resete kann ich keine Messung machen.

    Gruß Marc

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test