Guten Tag, ich habe folgendes Problem: Ein funktionierendes Beispielprojekt mit CodeVisionAVR für einen ATMega8 + SHT71-Temperatur-Feuchte-Sensor bekomme ich ums verderben nicht unter dem AVR Studio zum laufen. Fuses, Clock etc. habe ich in beiden Fällen mit dem AVR Studio einstellt. Beim CodeVision-Code bekomme ich korrekte Werte für T und RH, beim Studio-Code bekomme ich jeweils nur 0. Meine Vermutung ist, dass in der SHT_Measure(..), SHT_WriteByte(..), bzw. der SHT_ReadByte(..) irgendwas nicht stimmt, vielleicht einen Pin falsch gesetzt oder gelesen. Wäre dankbar wenn mal einer rüber schauen könnte, ich bin langsam code-blind. Hier noch mal die Einstellungen: STK500, ATMega8-16, 8MHz/IntOsc., SCK=PC1, DATA=PC0 gemäß funktionierendem Beispielprojekt. Vielen Dank im voraus, Martin / ahrensma@web.de
:
Verschoben durch Admin
> #define DATA_HI DDRC |= (1<<PC0) > #define DATA_LO DDRC &= ~(1<<PC0) Du willst den PORT umstellen um die Datenleitung auf High bzw. Low zu ziehen und nicht das DDR Register.
> DDRC = 0b00000011;
keine gute Idee. Aber da das im Original auch so war, würde ich das
jetzt erst mal so lassen, bis alles läuft.
Karl Heinz Buchegger schrieb: > Du willst den PORT umstellen um die Datenleitung auf High bzw. Low zu > ziehen und nicht das DDR Register. Eigentlich will man so den Port als Open Drain mit externem Pullup betreiben und tut dies dann völlig korrekt per DDR. Allerdings andersrum, d.h. DDRx=1 liefert als Ausgang dann DATA=0 und DDRx=0 liefert als Eingang dank des Pullups DATA=1. PORTx setzt man einmalig auf 0 und belässt es dabei. Die Datenleitung der SHTx ist bidirektional orientiert an I2C. Sie aktiv hochzuziehen ist der falsche Weg. Wenn man sowas bei 8051-Beispielcode findet, dann liegt das an dessen eigenwilligen Ports ohne starkem aktivem Pullup.
Moin, vielen Dank für die Mühe mir da zu helfen - leider hat es nicht geklappt. Ich habe mit aus dem Beitrag Beitrag "Tempertur/Feuchte Display/Logger mit ATMega128 SHT75 SD-Karte" jedoch die SHT71.zip geholt und diese ausprobiert - zunächst auch ohne Erfolg. Schlussendlich war hier - und vielleicht auch bei meinen vorherigen Versuchen das Problem der float-Wert Konvertierung. Ich bekam stehts ? als Werte. Die Lösung hier ist die "Aktivieren der Floating Point Version von sprintf beim WinAVR mit AVR-Studio" (http://www.mikrocontroller.net/articles/FAQ#Aktivieren_der_Floating_Point_Version_von_sprintf_beim_WinAVR_mit_AVR-Studio) im Detail für das AVR Studio 6 hier erklärt: http://blog.ib-rohde.de/tag/atmel-studio-printf/ . Grüße, Martin Ahrens **** BEITRAG ZUENDE ***
Martin Ahrens schrieb: > Moin, > > vielen Dank für die Mühe mir da zu helfen - leider hat es nicht > geklappt. Dann gibt es immer noch die Methode: abspecken! Dein komplettes Programm ist viel zu groß und macht viel zu viele Dinge, die (höchst wahrscheinlich) mit dem Problem gar nichts zu tun haben und nur das Debuggen erschweren. Abspecken auf das unbedingte Minimum und nachsehen, worin sich dann die Ergebnisse vom IAR-Programm und GCC-Programm unterscheiden. Und dann noch mal intensives Code-Studium, welche IAR Konstrukt falsch nach GCC übertragen wurde. Das war ja nur das, was mir beim Drüberlesen auf die Schnelle aufgefallen ist, dass du ein PORTC.0 = 1 offenbar mittels DDRC |= (1<<PC0) übersetzt. Und das ist dann nun mal die falsche 'Übersetzung'. Da kann durchaus noch mehr im Code sein.
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.