Bascom xMega und 1Wire verstehen sich nicht

sBronco

Neues Mitglied
23. Mai 2010
22
0
0
Sprachen
Hi Leute,

folgende Situation:
aus einer Funktionierenden Schaltung mit einem Mega64 habe ich eine, ebenfalls funktionierende Schaltung, mit einem xMega32A4 gemacht und 2 Platinen fertigen lassen.
Klappt alles genau so wie ich es mir vorgestellt hatte, außer der Abfrage meiner 5x DS18B20, das tut nicht.
Der Code ist der selbe der auf dem Mega64 läuft, die Port Pins sind geändert, der µC sendet auch Befehle und der DS sendet irgendwas zurück.
1WireA.png
der Sensor wird ab und in die alte Platine eingesteckt und bringt Problemlos Daten, zurück gesteckt, wieder nur Müll.
Ich habe ein Timingproblem, das weiß ich, daran liegts wohl nicht, da ich $crystal = 32000000 auch schon bis $crystal = 33000000 erhöht hatte, dann stimmen die Zeiten, funktioniert trotzdem nicht.
Die Pull Up Widerstände waren ursprünglich 5.1K dann 3.3K dann 2.2K, ändert leider nichts am Verhalten.
Die Sensoren liegen einzeln am Pin, deshalb brauch ich keinen ROM Code lesen.

Code:
SUB SENSORSTART

                  1wreset PinE , 0
                  1wwrite &HCC , 1 , PinE , 0
                  1wwrite &H44 , 1 , PinE , 0

                  1wreset PinE , 1
                  1wwrite &HCC , 1 , PinE , 1
                  1wwrite &H44 , 1 , PinE , 1

                                                  ' DS 1
                  1wreset PinD , 7
                  1wwrite &HCC , 1 , PinD , 7
                  1wwrite &H44 , 1 , PinD , 7
                                                     ' DS 2
                  1wreset Pind , 6
                  1wwrite &HCC , 1 , Pind , 6
                  1wwrite &H44 , 1 , Pind , 6
                                                    ' DS 3
                  1wreset Pind , 5
                  1wwrite &HCC , 1 , Pind , 5
                  1wwrite &H44 , 1 , Pind , 5

   TCd0_cca = 0
End Sub

'##################################################
'##################################################

SUB SENSORREAD
   For n = 1 to 5
      Select Case n
         Case 1:                                            ' AIR
                  1wreset PinE , 0
                  1wwrite &HCC , 1 , PinE , 0
                  1wwrite &HBE , 1 , PinE , 0
                  DigiData(1) = 1wread(9 , PinE , 0 )
                  1wreset PinE , 0
                  Call DSDATACALC


         Case 2:                                            ' WATER
                  1wreset PinE , 1
                  1wwrite &HCC , 1 , PinE , 1
                  1wwrite &HBE , 1 , PinE , 1
                  DigiData(1) = 1wread(9 , PinE , 1 )
                  1wreset PinE , 1
                  Call DSDATACALC



         Case 3:                                            ' DS 1
                  1wreset Pind , 7
                  1wwrite &HCC , 1 , Pind , 7
                  1wwrite &HBE , 1 , Pind , 7
                  DigiData(1) = 1wread(9 , Pind , 7 )
                  1wreset Pind , 7
                  Call DSDATACALC



         Case 4:                                            ' DS 2
                  1wreset Pind , 6
                  1wwrite &HCC , 1 , Pind , 6
                  1wwrite &HBE , 1 , Pind , 6
                  DigiData(1) = 1wread(9 , Pind , 6 )
                  1wreset Pind , 6
                  Call DSDATACALC


         Case 5:                                            ' DS 3
                  1wreset Pind , 5
                  1wwrite &HCC , 1 , Pind , 5
                  1wwrite &HBE , 1 , Pind , 5
                  DigiData(1) = 1wread(9 , Pind , 5 )
                  1wreset Pind , 5
                  Call DSDATACALC

      End Select
   Next

End Sub

Da alles andere tut, die Platinen teuer waren und ich die zusätzlichen Timer/PWM Ausgänge vom xMega brauche, sollte das schon mit dem xMega gehen, wäre toll.

Ich hoffe, Ihr könnt mir Tipps geben, an die ich vielleicht noch nicht gedacht habe.
Danke
Stephan
 
Hi Stephan,

Klappt alles genau so wie ich es mir vorgestellt hatte, außer der Abfrage meiner 5x DS18B20, das tut nicht.
Der Code ist der selbe der auf dem Mega64 läuft, die Port Pins sind geändert, der µC sendet auch Befehle und der DS sendet irgendwas zurück.
Anhang anzeigen 5879
der Sensor wird ab und in die alte Platine eingesteckt und bringt Problemlos Daten, zurück gesteckt, wieder nur Müll.
Ich habe ein Timingproblem, das weiß ich, daran liegts wohl nicht, da ich $crystal = 32000000 auch schon bis $crystal = 33000000 erhöht hatte, dann stimmen die Zeiten, funktioniert trotzdem nicht.

irgendwie sieht es bei HCC und HBE komisch aus. Sind das nur kurze positive Pulse? Da wäre ne höhere Auflösung interessant und mal ein wenig Zeitmessung der Bits. Kann es sein das er durch die langen Low-Zeiten einen Reset durchführt und darum nicht antwortet?

Der Bus scheint soweit ja zu funktionieren (Bleibt nicht auf Low oder High). Bei den Data-255 liegt ja ein Takt vom Prozessor an. Scheinbar reagiert aber der DS18B20 nicht sonst wäre nicht alles auf 255.

Mach doch einfach mal ne Abfrage des ROM-Codes vom DS18B20 (Befehl 33hex). Dann sollte er auf jeden Fall was rausschmeißen.

Wie sieht es mit der IO-Einstellung aus? der XMega hat meines Wissens auch PullDowns eingebaut die man aktivieren kann. Ist da alles richtig?

Gruß
Dino
 
Hi,
der DS antwortet, das sind die 9 Bytes nach den beiden Befehlen vom µC Skip ROM und Read Scratchpad
1Wire2Command.png
beim Reset 1sec vorher, sieht das so aus
1Wreset.png

der Code ist identisch mit dem vom M64, da gehts ja...

an den Pin Pull Up/Down hab ich nix geändert, vermutlich liegts daran
hab nur leider keinen Plan was da zu setzen ist

HCE HBE sind 8x 65µs Low und 2.5µs High Pulse


Gruß
Stephan
 
So,
mit Config 1Wire funktioniert das, wenn man wie ich, mehrere Pins benutzen will, nicht.

Dieser Befehl tut: 1wread( 1 ),
dieser nicht: 1wread(1 , PORTE , 1), der funktioniert mit jedem Mega aber nicht bei xMega, da Produziert er nur unlesbaren Müll


MCS schrieb:
Multi 1-wire devices on different pins are supported.

To use this you must specify the port pin that is used for the communication.

stimmt also nicht, das ist Scheiße, da meine Platine 5x Temperatur Ports hat.
Ich kann keine 5 DS an einem Pin benutzen, da ich kein Display und keinerlei Bedienelemente vorgesehen habe,
Kommunikation und Bedienung läuft ausschließlich über USB und Windows Frontend.

An verschiedenen Pins weiß ich immer genau welcher DS grade angesprochen wird, weil da wo Wassertemperatur aufgedruckt ist, eben genau dieser Sensor ist.
 
Hi,

mit Config 1Wire funktioniert das, wenn man wie ich, mehrere Pins benutzen will, nicht.

Dieser Befehl tut: 1wread( 1 ),
dieser nicht: 1wread(1 , PORTE , 1), der funktioniert mit jedem Mega aber nicht bei xMega, da Produziert er nur unlesbaren Müll

MCS schrieb:
Multi 1-wire devices on different pins are supported.
To use this you must specify the port pin that is used for the communication.

stimmt also nicht, das ist Scheiße, da meine Platine 5x Temperatur Ports hat.

hast du wegen dem Problem schonmal ne Mail an MCS geschickt?. Die sollen ja eigentlich recht gut reagieren.

Gruß
Dino
 
hast du wegen dem Problem schonmal ne Mail an MCS geschickt?. Die sollen ja eigentlich recht gut reagieren.

Gruß
Dino

Jo, gleich nach dem Post hier, da ich eine Seriennummer habe, sollte das recht zügig gehen.
Hatte letztes Jahr ein Problem, da habe ich eine .DLL zum Testen geschickt bekommen, damit gings dann tatsächlich.

Gruß
Stephan
 
Aber jetzt hab ich eine Antwort:

MCS schrieb:
hi
you can try a fix from register.mcselec.com SLA area. it is open for 24 hours.
the problem was that the pointer to the data was wrong for writing (xmega)

Best regards
Mark Alberts

und schon gehts...:)
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)