Forum: Mikrocontroller und Digitale Elektronik Problem mit DS18S20 und ATMega2560


von Andreas (ah3112)


Angehängte Dateien:

Lesenswert?

Hallo,

bei meinen Tests der letzten Tage hat sich ein neues Problem ergeben, wo 
ich nicht weiter weiss.

Bei Reichelt habe ich mir ein Atmega2560 Pro Board der Firma Joy-IT 
gekauft. Dort ist an Port PB4 ein DS18S20 angeschlossen.

Zunächst mal vorneweg. An der Software liegt es nicht. Ich habe die 
Software hier aus dem Forum von Falk genommen. An meinen weiteren 
Erklärungen zeigt sich auch noch, dass die funktioniert. Bevor ich mir 
das Atmega2560 Pro Board gekauft habe, habe ich die Software vor Monaten 
bereits auch an einem STK600 mit dem DS18S20 getestet. Das hat 
einwandfrei geklappt.

Auf dem Pro-Board kommt direkt am Anfang "No Response on Bus".

Nachdem die Software auf dem Pro-Board nicht funktioniert hatte, habe 
ich exakt denselben Hex-File auf das STK600 gespielt. Ich habe an der 
restlichen Hardware (Kabel zum Temperaturfühler) nichts geändert. 
Lediglich vom Pro-Board auf das STK600 umgesteckt. Dort läuft die 
Software einwandfrei. Über printf wurden die korrekten Temperaturen 
angezeigt.

Die Fuses auf beiden Boards waren auch identisch (e=0xFD, h=0x98, 
l=0xFF). Die Frequenz des Quarz war auch identisch.

Daraufhin habe ich an dem PRO-Board mit mehreren unterschiedlichen 
Pullups (3,9k, 4,22k und weil ich keinen 3,3k hier hatte, um in die Nähe 
von 3K zu kommen, 4,7K und 10K parallel) getestet. Immer noch "No 
Response on Bus".

Ebenfalls habe ich jedes delay in der Software um Faktor 2 erhöht. Auch 
das hat nichts gebracht.

Da ich kein Speicheroszilloskop habe, habe ich einen Logikanalysator 
angeschlossen. Der hat überhaupt nicht reagiert. Auch wenn ich dem nicht 
das 1-Wire-Protokoll eingestellt habe, sondern den entweder nur auf 
steigende oder fallende Flanke getriggert hatte. Der hatte überhaupt 
nicht reagiert.

Im Anschluss habe ich auf dem Pro-Board Port PC7 genommen. Dabei lief 
die Software plötzlich. Screenshot des Logikananlysators im Anhang. 
Anschliessend noch an PB6 und PB7. Auch dort läuft die Software. Nur 
nicht an PB4 und PB5.

Lasse ich an PB4 eine LED blinken, dann funktioniert das auch. Zum 
Testen bin ich zwischen dem Ein- und Ausschalten der LED bei dem delay 
schrittweise, angefangen von 100ms auf bis zu 1us, runtergegangen. Auch 
das zeigt der Logikanalysator einwandfrei an.

Mein Verdacht war, dass es eine kalte Lötstelle sein könnte. Deshalb 
habe ich die Stiftleiste nachgelötet. Aber auch das hat nichts geholfen. 
In der Umgebung von PB4 und PB5 habe ich das nach Kurzschlüssen 
durchgemessen. Ebenfalls negativ.

Von dem Atmega2560-Pro-Board habe ich keinen Schaltplan und weiss daher 
nicht, ob da noch irgendetwas dran hängt. Es gibt im Internet 
Schaltpläne von anderen Herstellern. Demnach wäre an PB4 nichts 
angeschlossen.

Im Datenblatt habe ich auch nichts gefunden, was darauf schließen lässt, 
PB4 nicht zu nehmen.

Hat jemand eine Idee, wie ich das Eingrenzen kann bzw. was der Grund 
sein könnte. Kann es sein, dass ausschließlich PB4 und PB5 defekt sind? 
Was ich mir allerdings nicht erklären kann.

Vielen Dank.

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Andreas schrieb:
> Hat jemand eine Idee, wie ich das Eingrenzen kann
Man müsste zuerst mit einem Oszilloskop messen, ob sich am Pin überhaupt 
was tut und wenn ja mit welchen Pegeln (Stichwort "Signalintegrität"). 
Denn der LA ist erst dann das richtige Werkzeug, wenn sichergestellt 
ist, dass die Pegel und Signalflanken passen. Eine Buskollision oder 
einen falsch konfigirierten Pin kann man mit dem Oszi leicht erkennen, 
ein LA (quasi ein Oszi mit 1 Bit Auflösung) tut sich da schwer.

von Torsten B. (butterbrotstern)


Lesenswert?

PB5 OC1A/PCINT5 (Output Compare and PWM Output A for Timer/Counter1 or 
Pin Change Interrupt 5)
PB4 OC2A/PCINT4 (Output Compare and PWM Output A for Timer/Counter2 or 
Pin Change Interrupt 4)

Wenn nur Widerstände und Messgerät zur Verfügung stehen: einen 
Spannungsteiler ca. VCC/2 bauen und schauen, ob sich der Pegel ändert, 
wenn er mit dem Port verbunden wird. Dann sieht man während man den µC 
resettet, ob noch etwas anderes am Pin hängt.

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

Andreas schrieb:
> Lasse ich an PB4 eine LED blinken, dann funktioniert das auch. Zum
> Testen bin ich zwischen dem Ein- und Ausschalten der LED bei dem delay
> schrittweise, angefangen von 100ms auf bis zu 1us, runtergegangen. Auch
> das zeigt der Logikanalysator einwandfrei an.

Dann ist die Hardware in Ordnung.

> Hat jemand eine Idee, wie ich das Eingrenzen kann bzw. was der Grund
> sein könnte. Kann es sein, dass ausschließlich PB4 und PB5 defekt sind?

Nein, denn du kannst ja eine LED blinken.

> Was ich mir allerdings nicht erklären kann.

Prüfe nochmal die #define in onewire.h. Vielleicht hast du dort einen 
Tipfehler.

von Andreas (ah3112)


Lesenswert?

Lothar M. schrieb:
> Man müsste zuerst mit einem Oszilloskop messen, ob sich am Pin überhaupt
> was tut und wenn ja mit welchen Pegeln (Stichwort "Signalintegrität").
Die Flanken der Signale hatte ich als erstes in Verdacht. Aber ich habe 
nur ein altes analoges Oszi. Da kann ich nichts feststellen, weil das 
nicht speichert.

Torsten B. schrieb:
> Wenn nur Widerstände und Messgerät zur Verfügung stehen: einen
> Spannungsteiler ca. VCC/2 bauen und schauen, ob sich der Pegel ändert,
> wenn er mit dem Port verbunden wird. Dann sieht man während man den µC
> resettet, ob noch etwas anderes am Pin hängt.
Das habe ich nicht verstanden. Dass sich die Pegel ändern, habe ich doch 
bei der blinkenden LED festgestellt.

Falk B. schrieb:
> Prüfe nochmal die #define in onewire.h. Vielleicht hast du dort einen
> Tipfehler.
Leider nicht.
1
#define ONEWIRE_BIT  PB4
2
#define ONEWIRE_PIN  PINB
3
#define ONEWIRE_PORT PORTB
4
#define ONEWIRE_DDR  DDRB

Ich habe parallel eine Email an die Firma Joy-IT geschickt und dort mal 
nachgefragt. Das wird aber sicherlich ein paar Tage dauern.

Danke Euch erstmal für die Antworten.

von Frank O. (frank_o)


Lesenswert?

Du sagst der DS18S20 ist auf dem Board schon angeschlossen.
Weißt du die Adresse vom Sensor und hast die angegeben?
Denn vorher hast du die Software mit einem anderen Sensor,  der eine 
andere Adresse hat, laufen gehabt.  Solltest du die Software genau so 
verwenden, kann das nicht funktionieren.

von Frank E. (ffje)


Lesenswert?

Frank O. schrieb:
> auf dem Board schon angeschlossen

Habe ich im TO-Beitrag nicht gelesen, das Schon.
Das würde bedeuten, mit DS18... geliefert?
Nee, mit LM35 evtl.. Solange nur ein DS18... an einem Pin angeschlossen 
ist, kann mit dem auch ohne Verwendung seiner Unique-ID kommuniziert 
werden, aber... ich kenne die SW ja nicht... - ich bemühe mich meist 
selbst.

mfG  fE

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Andreas schrieb:
> Aber ich habe nur ein altes analoges Oszi. Da kann ich nichts
> feststellen, weil das nicht speichert.
Du musst diese Flanke nur oft genug wiederholen, dann siehst du schon, 
wie die aussieht.

Beitrag #7927208 wurde vom Autor gelöscht.
von Rainer W. (rawi)


Lesenswert?

Frank O. schrieb:
> Weißt du die Adresse vom Sensor und hast die angegeben?

Eine vernünftige Software sollte den 1-wire Adressbaum doch erstmal auf 
Sensoren abklappern und nicht die Adressen hartkodiert im Code erwarten.

https://www.analog.com/en/resources/app-notes/1wire-search-algorithm.html

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

Rainer W. schrieb:
>> Weißt du die Adresse vom Sensor und hast die angegeben?
>
> Eine vernünftige Software sollte den 1-wire Adressbaum doch erstmal auf
> Sensoren abklappern und nicht die Adressen hartkodiert im Code erwarten.

Wenn nur ein One Wire IC dranhängt, kann man den ohne Adresse direkt 
ansprechen. Aber auch die normale Adressuche kann die Ssftware. Aber all 
das ist gar nicht das Problem. Das ist eher, daß viele Leute gar nicht 
lesen und schon gar nicht verstehen, was der OP schon erfolgreich 
getestet hat!
Die Software funktioniert auch den meisten IO Pins, aber nicht auf PB4 
und PB5.

von Rainer W. (rawi)


Lesenswert?

Falk B. schrieb:
> Die Software funktioniert auch den meisten IO Pins, aber nicht auf PB4
> und PB5.

Ist das jetzt die Wiederholung der Aussage von Andreas oder ist das eine 
Eigenschaft deiner Software (falls 'ja', warum?)?

Andreas schrieb:
> Ich habe die Software hier aus dem Forum von Falk genommen.

: Bearbeitet durch User
von Andreas (ah3112)


Lesenswert?

Lothar M. schrieb:
> Du musst diese Flanke nur oft genug wiederholen, dann siehst du schon,
> wie die aussieht.
Ich versuche das morgen mal. Was mich aber irritiert, ist die Sache, 
dass ich bei der LED das mit dem Logikanalysator sehe. Klar, ist dann 
nicht der DS18S20 angeschlossen.

Falk B. schrieb:
> Die Software funktioniert auch den meisten IO Pins, aber nicht auf PB4
> und PB5.
Genau und auf dem STK600 funktioniert sie sogar auf PB4. Es ist auch nur 
ein einziger DS18S20 angeschlossen. Der auch nicht im parasitären 
Betrieb sondern mit +5V.

Ich habe gerade eben auch bei einem anderen Händler ein Atmega2560 Board 
bestellt. Wenn das nächste Woche kommt, werde ich es damit auch nochmal 
testen.

von Andreas (ah3112)


Angehängte Dateien:

Lesenswert?

Ich habe das jetzt doch noch mit dem Oszi aufgebaut und versucht es so, 
wie Lothar vorgeschlagen hat, zu machen. Zumindest versucht.

Wie ich das gemacht habe, erkläre ich gleich. Hier erst einmal die 
Einstellungen des Oszilloskops bei den einzelnen Fotos.

Foto 1: Port PB4; Oszi: DC; 0,5V; 0,2ms

Foto 2: Port PB4; Oszi: AC; 50mV; 0,2ms

Foto 3: Port PB7; Oszi: DC; 1V; 50us

Foto 4: Port PB7; Oszi: DC; 1V;, 0,2ms

Da es kein Sinn machte, die komplette Software von Falk laufen zu 
lassen, habe ich nur Teile rauskopiert.

Die Software sah folgendermaßen aus:
1
  uint8_t ret = onewire_reset();
2
  printf("ret = %d\n\r", ret);
3
4
  while(1) {
5
    onewire_reset();
6
  }

onewire_reset, unverändert von Falk:
1
uint8_t onewire_reset(void) {
2
    uint8_t err=ONEWIRE_OK;
3
4
    ONEWIRE_PORT &= ~ONEWIRE_MASK;              // low
5
    ONEWIRE_DDR  |=  ONEWIRE_MASK;              // switch to ouput
6
    _delay_us(480);
7
    //ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
8
    uint8_t sreg_tmp=SREG; cli(); // Arduino workaround :-0
9
        ONEWIRE_DDR  &= ~ONEWIRE_MASK;              // switch to input
10
        _delay_us(66);
11
        if( (ONEWIRE_PIN & ONEWIRE_MASK)) {         // no presence pulse detect
12
            err = ONEWIRE_NO_PRESENCE;
13
        }
14
    //}
15
    SREG = sreg_tmp;        // Arduino workaround :-0
16
17
    _delay_us(480);
18
    if( !(ONEWIRE_PIN & ONEWIRE_MASK)) {        // bus short circuit to GND
19
        err = ONEWIRE_GND_SHORT;
20
    }
21
    return err;
22
}

Ursprünglich hatte ich mir nur den ersten Teil aus onewire_reset kopiert 
und wollte das in einer while-schleife laufen lassen
1
  uint8_t err=ONEWIRE_NO_PRESENCE;
2
  while(err ==  ONEWIRE_NO_PRESENCE) {
3
    ...
4
  }
5
  printf("ok\n\r");
6
  while(1);

Dabei fiel mir in Hterm schon auf, dass "ok\n\r" angezeigt wurde, was 
ich aber nicht erwartet hatte. Daraufhin habe ich vor der while-schleife 
einmal onewire_reset aufgerufen und mir den return anzeigen lassen. Der 
war "5". Falk hat dafür
1
#define ONEWIRE_GND_SHORT    5        // bus short circuit to GND
definiert.

Meine Vermutung ist, dass der Eingang des PB4 defekt ist. Ich habe zwar 
den Ausgang mit der LED getestet, aber blöderweise nicht den Eingang.

Mache ich das Ganze mit PB7, dann bekomme ich bei onewire_reset 0 
zurück. Also alles ok. Die Signale (Fotos 3 und 4) sehen auch ganz 
anders aus.

von Sebastian W. (wangnick)


Lesenswert?

Andreas schrieb:
> Foto 3: Port PB7; Oszi: DC; 1V; 50us

Seltsam. Läuft der Atmega2560 nur mit 3.3V?

von Andreas (ah3112)


Lesenswert?

Sebastian W. schrieb:
> Seltsam. Läuft der Atmega2560 nur mit 3.3V?
Über USB. Habe jetzt nicht mehr nachgemessen. Aber gestern habe ich 
direkt am Ds18s20 gemessen. Da lagen 4,8V an.

von Rainer W. (rawi)


Lesenswert?

Andreas schrieb:
> Aber gestern habe ich direkt am Ds18s20 gemessen. Da lagen 4,8V an.

Wie verträgt sich das mit

Andreas schrieb:
> Foto3.jpg und Foto4.jpg

Mit welcher Spannung läuft der Atmega2560?

von Andreas (ah3112)


Lesenswert?

Rainer W. schrieb:
> Mit welcher Spannung läuft der Atmega2560?
Der wird über die USB-Buchse meines PCs versorgt. Vom 5V-Anschluss des 
Boards wird der DS18S20 versorgt.

Beitrag #7927488 wurde vom Autor gelöscht.
von Manfred P. (pruckelfred)


Lesenswert?

Loco M. schrieb im Beitrag #7927488:
> D.h. der DS18S20 hängt an 5V und der 2560 läuft mit 3,3V (siehe 3,3V
> Spannungsregler auf dem Board!!!)

Du kennst das Board, was Andreas nicht näher benennen will?

Die Suche nach "Atmega2560 Pro Board der Firma Joy-IT" zeigt mir einen 
Arduino-Clone samt einer schlechten Beschreibung "Logik Level 5 Volt".

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.