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
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.
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
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.
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.
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.
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
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.
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
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.
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
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.
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.
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.
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?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.