Forum: Mikrocontroller und Digitale Elektronik Mit MSP430 einen IC( bq2023) programmieren


von Robin (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

ich hab ein Problem und ich komme da einfach nicht weiter!
Ich bin leider auch noch blutiger Anfänger in Mikrokontroller 
programmieren!

Folgendes:
Ich soll auf einem msp430FG4618 ein 1-Wirebus mit einem 
Akkuzustandszähler(bq2023) implementieren!

Leider liegt das Problem nicht an dem MSP430 sondern an dem andern IC 
dem Akkuzustandszähler!
Diesen muss ich nämlich erst programmieren! Aber dazu komme ich gar 
nicht erst!
Das Datenblatt habe ich in den Anhang geladen! Ich hoffe es kann und 
will mir hier trotzdem jemand helfen.

Mein Ziel ist es mir den 64 Bit ID ROM auszulesen.

Es gibt sogenannte ROM-Befehle auf dem IC! Dazu sind im Datenblatt 
„Flow-Charts“ enthalten. ( S.13)

Bis jetzt habe ich es geschafft den BQ2023 zu initialisieren (Er schickt 
als Bestätigung einen „Presence Pulse“).
Danach versuche ich dem IC über den Mikrokontrolerpin die Hex-Zahl mit 
dem LSB angefangen zu schicken. Für das Timing bzw. eine gültige 1 bzw. 
0 für den BQ2023 zu schicken, verwende ich die „Timing Diagrams“ ab S.5, 
„SDQ-Write-Bit-ONE“ und „-BIT-ZERO“! (Write da ich dem BQ2023 ja etwas 
schicken will.)

So ich habe nun die Hexzahl, hoffentlich richtig eingegeben, für den 
BQ2023! Sehe ich auch alles auf dem Oszilloskop! Nun erwarte ich aber, 
dem „Flowchart-Diagram“ zur Folge, dass der BQ2023 mir seine ID-ROM 
schickt mit dem LSB angefangen. Da sehe ich aber nichts auf dem 
Oszilloskop!!!

Hat jemand vlt. schon einen grundlegenden Fehler entdeckt?
Ich hoffe Ihr könnt mir helfen!

Mich irritiert der Block „ROM Command issued?“ im „Flowchart-Diagram“! 
Muss ich dem IC da vlt. noch etwas schicken!?



Viele Grüße

Robin

von Jörg S. (joerg-s)


Angehängte Dateien:

Lesenswert?

Robin schrieb:
> So ich habe nun die Hexzahl, hoffentlich richtig eingegeben, für den
> BQ2023! Sehe ich auch alles auf dem Oszilloskop!
Du hast also 0x33 gesendet?

> Mich irritiert der Block „ROM Command issued?“ im „Flowchart-Diagram“!
> Muss ich dem IC da vlt. noch etwas schicken!?
Verstehe ich auch nicht. Aber du kannst ja auch mal einen anderen Befehl 
versuchen.


Interessant für dich könnte auch noch das Datenblatt vom DS2761 (Maxim) 
sein.

In Anhang einen Code den ich bei Google gefunden habe.

von Robin (Gast)


Lesenswert?

Hey Jörg,

danke erst einmal für deine Antwort!
Ich habe die Hexzahl Bit für Bit eingegeben da es sich um einen 
1-WireBus handelt( Also einen Pin) und ich die Timing Diagramme beachten 
wollte!

Folgenden Code habe ich in einer While-Schleife für den 
InitialisierungsPuls und den ROM-Code geschickt( While damit ich alles 
auf dem Oszilloskop beobachten kann):



//SDQ-Reset-Timing Diagram
// ***********************************************
 while(i<=80000000){
   P1DIR |= BIT7;           // Set port1-pin#7 in outputdirection

    P1OUT &= ~BIT7;           // Put P1.7 to low
   __delay_cycles(8000);        // Wait 1000 microsec

   P1OUT |=BIT7;           // Put P1.7 to high     // Now bq2023 have to 
send a Presence Pulse hand have to be initialized
  __delay_cycles(400);      // Wait 50 microsec

  //P1DIR &= ~BIT7;          // Set port-pin#7 in inputdirection, 
because of Initializationpuls ob bq2023

  P1OUT &= ~BIT7;
  __delay_cycles(1200);      // Wait 150 microsec

  P1OUT |= BIT7;
  __delay_cycles(3200);      // Wait 400 microsec

// ************************************************
// send Read Rom command (33H)=(0011 0011), importandt: fist send LSB

  P1OUT &= ~BIT7;
  __delay_cycles(4000);      //Wait 500 microsec.
  P1OUT |= BIT7;
  __delay_cycles(400);      // Wait 50 microsec  --> It Should be a 
presencepulse here!

//first Bit send LSB=1
  P1OUT &= ~BIT7;
   __delay_cycles(80);        // Wait 10 microsec.
   P1OUT |= BIT7;          // high
   __delay_cycles(960);      // Wait 120 microsec.


// secound Bit=1
  P1OUT &= ~BIT7;
   __delay_cycles(80);        // Wait 10 microsec.
   P1OUT |= BIT7;          // high
   __delay_cycles(960);      // Wait 120 microsec.



//third Bit=0
  P1OUT &= ~BIT7;
  __delay_cycles(800);       // Wait 100 microsec.
  P1OUT |= BIT7;
  __delay_cycles(80);        // Wait 10 microsec.


//fourth Bit=0
  P1OUT &= ~BIT7;
  __delay_cycles(800);       // Wait 100 microsec.
  P1OUT |= BIT7;
  __delay_cycles(80);        // Wait 10 microsec.


// fifth Bit=1;
  P1OUT &= ~BIT7;
   __delay_cycles(80);        // Wait 10 microsec.
   P1OUT |= BIT7;          // high
   __delay_cycles(960);      // Wait 120 microsec.


  P1OUT &= ~BIT7;          // Notwendig??
  P1OUT |= BIT7;          // Notwendig??

// sixth Bit=1
  P1OUT &= ~BIT7;
   __delay_cycles(80);        // Wait 10 microsec.
   P1OUT |= BIT7;          // high
   __delay_cycles(960);      // Wait 120 microsec.



//seventh Bit=0
  P1OUT &= ~BIT7;
  __delay_cycles(800);       // Wait 100 microsec.
  P1OUT |= BIT7;
  __delay_cycles(80);        // Wait 10 microsec.


//eighth Bit=0
  P1OUT &= ~BIT7;
  __delay_cycles(800);       // Wait 100 microsec.
  P1OUT |= BIT7;
  __delay_cycles(80);        // Wait 10 microsec.


  P1OUT &= ~BIT7;
  __delay_cycles(160);        // Wait 20 microsec.

   P1DIR &= ~BIT7;          // Set port-pin#7 in inputdirection, nun 
sollte bq Sequenz senden
     __delay_cycles(80000);    // Wait 10 millisec.


   i++;

 }

von Jörg S. (joerg-s)


Lesenswert?

Und nach "send Read Rom command " hast du aufgehört? Um Daten lesen zu 
können muss du den Bus für jedes Bit was du lesen willst kurz auf low 
ziehen. Geht er danach gleich wieder auf high, ist das eine 1, zieht der 
bq2023 den Bus weiter auf low ist das eine 0 (Siehe Seite 6 im 
Datenblatt).
Schau dir am besten mal das Datenblatt vom DS2761 an, bei Maxim ist 
OneWire besser erklärt.
Oder schau hier im Forum nach Code und Infos zum DS18B20. Source Code 
für OneWire und MSP430 gibt's z.B. hier:
Beitrag "Wer hat DS18x20 an MSP430 am laufen?"

von Robin (Gast)


Lesenswert?

Lieben Dank, das versuche ich demnächst jetzt mal!

Gruß

Robin

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.