Forum: Compiler & IDEs DS18B20 rom search


von Christian Georgi (Gast)


Lesenswert?

Hallo,

ich versuche ein Projekt mit dem DS18B20 zu bauen.
Ich benutze die files von Peter Dannegger;
Bei der Rom search wird auch richtig -2 für keine Device zurückgegben.
Wenn allerdings ein Device am  Bus hängt bekomme ich als cnt 0.
Er kommt da aus der search rom routine nicht wieder oder bringt einen 
falschen Rückgabewert.

Die Zeile    if (i ==40){return i;} habe ich eingefügt.
Die 40 bekomme ich auch noch.
Wenn ich die Zahl auf 32 ändere bekomme ich als rückgabe von rom search 
0...

kann mir jemand helfen?

Danke
Gruß
Christian


uchar w1_rom_search( uchar diff, uchar idata *id, uchar W1PIN )
{
  uchar i, j, next_diff,a;
  bit b;
  if( w1_reset( W1PIN) ){
    return PRESENCE_ERR;      // error, no device found
  }
  w1_byte_wr( SEARCH_ROM, W1PIN);    // ROM search command
  next_diff = LAST_DEVICE;      // unchanged on last device
  i = 8 * 8;          // 8 bytes
  do{

    j = 8;          // 8 bits
    do{
      b = w1_bit_io( 1 , W1PIN);    // read bit
      if( w1_bit_io( 1 , W1PIN) ){    // read complement bit
  if( b )          // 11
    return DATA_ERR;      // data error
      }else{
  if( !b ){        // 00 = 2 devices

    if( diff > i ||
      ((*id & 1) && diff != i) ){
      b = 1;        // now 1
      next_diff = i;      // next pass 0
    }
  }
      }
      w1_bit_io( b , W1PIN);         // write bit
      *id >>= 1;
      if( b ){*id |= 0x80;}// store bit
      i--;

    }while( --j );
    id++;          // next byte
    if (i ==40){return i;}
  }while( i );

von Christian Georgi (Gast)


Lesenswert?

ok, bin jetzt soweit, das ich in der Routine w1_bit_io das deaktivieren 
aktivieren der interrupts auskommentiert habe.
Ich bekomme jetzt Ausgabe siehe unten.
Niemand eine Idee?
Danke
Gruß Christian
D:\1WireDs1820.exe meastemp 0
found 4 busses
seen product ->USB-DS1820<-
PIN:0
ID: 28 BF 62 3B 01 00 00 D8; Temperatur:  170.5 C; returned T: 0x155

D:\1WireDs1820.exe meastemp 1
found 4 busses
seen product ->USB-DS1820<-
PIN:1
ID: 28 BF 62 3B 01 00 00 D8; Temperatur:  170.0 C; returned T: 0x154


uchar w1_bit_io( bit b, uchar W1PIN )
{
//  cli();
  W1_DDR |= 1<<W1PIN;
  DELAY( DELAY_US( 1 ));
  if( b )
    W1_DDR &= ~(1<<W1PIN);
  DELAY( DELAY_US( 15 - 1 ));
  if( (W1_IN & (1<<W1PIN)) == 0 )
    b = 0;
  DELAY( DELAY_US( 60 - 15 ));
  W1_DDR &= ~(1<<W1PIN);
//  sei();
  return b;
}

von gast (Gast)


Lesenswert?

Bei den spärlichen Infos kommen einem keine Ideen, nur
abzuschalten ;-)

Also die Originalroutinen haben bei mir so funktioniert.

Wenn Du daran änderst, solltest du schon wissen was du tust.
Und auch solltest Du wissen, wie deine sonstige Programmumgebung
dazu aussieht, sprich ob Interrupts z.B. stören, so wie es ja
wohl der Fall zu sein scheint, da du cli/sei eingebaut hast.
Das Timing ist kritisch. Durch nichts darf es gestört werden.
Ansonsten hast Du Probleme.
Probiere doch erstmal die Originalroutinen zum laufen zu bringen.
Wenn die dann funktionieren, dann siehst du weiter.

von Christian Georgi (Gast)


Angehängte Dateien:

Lesenswert?

Na wenns an den Infos liegt ...
Ich hab mal den Schaltplan und die Sourcen angehängt.

Ich hab den Code mit USB so im Netz gefunden...
Angeblich funktioniert er.

Gruß
Christian

von gast (Gast)


Lesenswert?

Ein RIESEN Upload. Wofür? Wenigstens hättest Du die Fotos
rauslassen können. Und Schaltbilder bitte KLAR lesbar.
So habe ich nicht reingesehen.


Ja und wie man sieht, es ist nicht alles Plug&Play was
man so findet.
Aber ich habe kurz in den Source geschaut und gesehen,
Du kannst dort 1A die 1Wire Sensoren erstmal alleine
prüfen ohne USB. Und wenn das dann funkt, dann hast Du
erst auch mal Grundwissen zu den 1W Routinen gesammelt
und kannst in Ruhe weiter probieren. Ich habe leider nicht
soviel Zeit, dir alles "vorzukauen" ;-)

von Christian Georgi (Gast)


Lesenswert?

also mit den Interrupts  in der Routine geht nicht.
Aber das Ergebnis passt.. wenn man das Komma verschiebt.

Ok die Bilder waren vielleicht bisschen groß.
Der Schaltplan ist klar lesbar... ich weiß nicht was du da meinst.

Eigentlich hatte ich nicht vor das Rad 2 mal zu erfinden.

Aber danke trotzdem.
Gruß
Christian

von gast (Gast)


Lesenswert?

Na das ist ja fein, dass es geht.
Mit welchem Tool hast Du Schaltpläne geöffnet? Ich habe keines
hier, mit dem ich .sch Dateien öffnen kann. PNG wäre angebracht.

von Christian Georgi (Gast)


Lesenswert?

Die Schaltpläne sind mit Eagle(www.cadsoft.de) erstellt.

von gast (Gast)


Lesenswert?

Das mag sein, aber Eagle gehört meines Wissens nicht zur 
Grundausstattung auf den PCs. Du kannst nicht davon ausgehen, dass das 
jeder hat. Und nur um mal eben irgendetwas nachzuschauen für jemanden, 
dafür Eagle zu installeren ist etwas viel verlangt. De Arbeit must Du 
Dir schon machen und sie in "normal" lesbarer Form posten! Warum willst 
Du das nicht einsehen?

von Christian Georgi (Gast)


Lesenswert?

AVR-GCC gehört meines wissens auch nicht zur Grundaustattung eines 
PC's...
Ja klar hätte ich dei Schaltpläne auch als Bild anhängen können.
Hätte ich auch gemacht, wenn derjenige, der sich das anschauen hätte 
wollen keine Eagle gehabt hätte.Viele, die hier mit avr-gcc arbeiten 
haben sicherlich auch ein Leiterplattenprogramm.
Ich will hier auch keinen Streit vom Zaun brechen.
Wie man so schön sagt der Ton macht die Musik.
Ich bin immer für jede Hilfe dankbar und ich will bestimmt nicht,dass 
jemand die ganze Arbeit für mich macht.
Es gibt einfach Punkte an denn ich selbst nicht weiterkomme.
Und ich bin froh, wenn ich hier einen Tip bekomme.

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.