Also ich drehe gleich am Rad :(
ärgere mich hier mit einem SHT11 rum, die diversen anderen Threads habe
ich schon besucht und gelesen, sowie die verschiedenen Codes probiert,
jedoch habe ich das Problem das man manche nicht verwenden kann (Beim
M16 muß der Pin seperat auf Eingang geschaltet werden) oder nicht
compilierbar (verwende MicroC).
Ich habe mir nun mal aus lauter Verzweiflung eine super simple Init des
SHT11 geschrieben. (DATA an PB5, CLOCK am PB7).:
Jedoch zieht der SHT11 die Leitung nicht auf Null, für den ersten ACK,
runter :/
Ich habe DATA mit 10K gegen 5V VDD stehen. Kommt der SHT11 dagegen
eventuell nicht an?! Wenn ich den Pullup jedoch garnicht gegen VDD
stelle funktioniert er auch nicht.
Kann es sein das der SHT11 defekt ist?! Die Pins des SHT habe ich gegen
die Pins am Atmega durchgeklingelt, das sitzt alles, so das ich nen
Verdrahtungsfehler eigentlich ausschließen kann.
Hi,
mal die Kabel zum Sensor verkürzt?
100nF Blockkondensatoren an Vcc?
Bei mir waren entweder die Signalflanken zu schlecht aufgrund des Kabels
oder weil ich den 100nF weggelassen habe.
Gruss
Ich kenne nur die Sensirion SHT7x Sensoren.
Da wird gesagt, dass man Data gar nicht High treiben soll, sondern sich
wie ein Open Collectro verhalten soll.
Also:
1) Data Pegel immer = 0
2) Pull-up dran
3) für Data = input oder data = output high : data pin auf input
schalten
4) für Data = output low : data pin auf output schalten.
Vielleicht liegt's daran, habe gerade keine Lust auf deinen C-code.
C-Code wird meist mit Schleifen ein wenig übersichtlicher, was zB Anzahl
an CLKs und so angeht...
Mattes schrieb:
> Hi,>> mal die Kabel zum Sensor verkürzt?> 100nF Blockkondensatoren an Vcc?> Bei mir waren entweder die Signalflanken zu schlecht aufgrund des Kabels> oder weil ich den 100nF weggelassen habe.>> Gruss
Kabel gibt es keine und der 100nf steht auch ziemlich in der Nähe des
SHT. :/
X- Rocka schrieb:
> Ich kenne nur die Sensirion SHT7x Sensoren.>> Da wird gesagt, dass man Data gar nicht High treiben soll, sondern sich> wie ein Open Collectro verhalten soll.>>Also:>> 1) Data Pegel immer = 0>> 2) Pull-up dran>> 3) für Data = input oder data = output high : data pin auf input> schalten>> 4) für Data = output low : data pin auf output schalten.>> Vielleicht liegt's daran, habe gerade keine Lust auf deinen C-code.> C-Code wird meist mit Schleifen ein wenig übersichtlicher, was zB Anzahl> an CLKs und so angeht...
Danke für diesen Hinweis! Werde ich mal probieren.
Ist Richtig, ich mach das ja normalerweiße auch mit Schleifen, aber ich
bin mir schon so unsicher das ich dies einfach so machen musste um
Nerven zu beruhigen :D
Sooo.. habe ihn nur noch am Pullup laufen und nehme diesen mit dem µC
runter. Der Port B5 wird nun nicht mehr vom µC auf High gesetzt. Dennoch
übernimmt der SHT nicht die Kontrolle über den Port :/
Wie lautet nochmal der ASM Befehl um den Port auf ausgang zu schalten?
Vielleicht macht mein MicroC da die Probleme!? :/
Also Quasi der hälfte der Flanke soll DATA seinen Wert erhalten. Ach du
meine Güte, was ist das denn für nen verkorkstes serielles Interface.
-.-
Hier mal der Ausschnitt aus dem deutschen Datenblatt:
2.2.2 Serial data (DATA)
Der DATA Tristate-Pin wird für das Auslesen der Daten
verwendet. Auf diesem Pin werden die Daten zum Ende der
abfallenden Flanke des SCK bereitgestellt und sind während
der ansteigenden Flanke gültig. Ein externer pull-up
Widerstand wird benötigt um das Signal auf high zu
schalten (vgl. Abb. 2). Pull-up Widerstände finden in I/O
Schaltkreisen eines μC häufig Anwendung.
Ich werde es mal umsetzen.
So also es läuft immernoch nicht :/ Gehe nun langsam wirklich davon aus
der SHT nicht funzt oder irgendwo nen Lötfehler vorhanden ist... kann
nochmal jemand drüber schauen?! Achtung auf DATA ist 0 und 1 vertauscht,
da ich den Port ja auf Null runter ziehe:
Eigentlich müsste mir die Zahl 2 augeben, macht er aber nicht, er gibt
halt immer 3 aus. :/ Also kommt kein ACK zu stande.
Kann mir jemand dem Assembler Befehler geben das ich diesen Pin (PB5)
nur auf lesen für Open Collector bzw. Tristate stellen kann?!
mit
X- Rocka schrieb:
> 1) Data Pegel immer = 0>> 2) Pull-up dran>> 3) für Data = input oder data = output high : data pin auf input>> schalten>> 4) für Data = output low : data pin auf output schalten.
Nochmal nachgedacht...
Wenn ich nun denn 10k gesicherten Pullup mit dem µC auf low ziehe und
dann wieder auf high setze - registriert dann der SHT überhaupt den
Pegelwechsel?!
Laut Datenblatt:
Low level input voltage Negative going: 0 20% Vdd
High level input voltage Positive going: 80% 100% Vdd
Da reicht es doch nicht aus, den Pin einfach wieder auf PullUp zu
schalten bei 5V VDD oder?
Draco schrieb:
> Da reicht es doch nicht aus, den Pin einfach wieder auf PullUp zu> schalten bei 5V VDD oder?
deswegen besser 10k oder gar 4k7 externen pull-up!
ähm
logisch 0 ausgeben -> pin auf ausgang und auf 0 setzen
logisch 1 ausgeben -> auf eingang schalten, der pull-up sorgt dann für
den 5V pegel
es recht also das DDR oder TRIS register zu manipulieren. dann hat man
einen pseudo-open-drain ausgang :)
spess53 schrieb:
> Hi>> Stop. Natürlich: cbi DDRB,1<<DDRB5>> MfG Spess
Vielen Dank! Das setzt PortB Pin 5 nun auf Eingang, dann dürfte ja
sbi DDRB,1<<DDRB5
den Pin wieder auf Ausgang schalten?! Denn wenn im DDRx Register die 1
für Ausgang und die 0 für Eingang steht dann hab ich ja folgende
Zusammensetzung:
sbi - wird das angegebene Bit auf 1 gesetzt
DDRB - Datenrichtungsregister für PortB
1<<DDRB5 = kann ich mir noch nicht erklären.. Bedeutet das der Pin B5
auf 0 gestellt wird? Also für Ausgang auf High 1>>DDRB?!
Ich hänge morgen auch mal ein Oszi drann. Hatte vorhin mal einen
Logiktester dranne, und habe gesehen das er den Pin nicht ganz auf Grund
zieht und dann auch nicht mehr freigibt, so das der SHT übernehmen kann.
Heute Abend ist erst mal ruhe von dem Ding angesagt. ;)
Vielen vielen Dank erstmal für eure Hilfe!
Hrr Hrr Hrr.... :D
Er lebt!
Sooo heute Oszi dran gehabt und festgstellt das.: Wenn der DATA Pin als
Eingang definiert ist, er denn Pullup runterzieht und ihn wieder gehen
läßt, nur noch Schrott auf der Leitung liegt. Also ich muß beim
Schreiben den Pin wirklich auf Ausgang setzen. Und beim lesen den Pin
auf Eingang schalten. Anderst klappt es nicht - zumindest bekomme ich
dann keine sauberen Signale auf der Leitung (die highs liegen dann so
irgendwo zwischen 2V und 4V).
Also ich bekomme nun mein ACK Signal rein. Danach lasse ich momentan
noch eine 2 Sekunden Schleife laufen mit einem ripple auf der SCK
Leitung alle zwei nop. Bekomme dann auch zwischen 4-6 bit auf high, muß
nun halt nur noch gescheit den ACK abfragen und dann die 12 bzw 14 Bit
abfragen.
1
asm{
2
ldir16,0x32
3
outDDRB,r16
4
}
5
DDRB=0x80;
So nun hab ich noch zwei Schönheitsfehler. Mit obigen ASM Code sollte
ich doch eigentlich PortB Pin5 auf Eingang schalten oder? Er schaltet
aber den gesamten Port auf eingang, was nun wiederrum auf Pin7 für
Probleme sorgt, deswegen muß ich dann noch mit "DDRB = 0x80" den Pin7
wieder auf ausgang schalten. Kann ich das irgendwie umgehen? Es
funktioniert zwar - aber schön ist das nicht!
Mein Inline Asembler kann leider die oben aufgeführten Snipets nicht
verarbeiten:
1
in temp, DDRB
2
andi temp, 0b00100000
3
out DDRB, temp
hier möchte mein Compiler die Variable "temp" definiert haben, jeglicher
Versuch sie zu defnieren scheitert allerdings :/
sowie
1
cbi DDRB,1<<DDRB5
hier kann er leider mit DDRB5 überhaupt nichts anfangen :/
Michael U. schrieb:
> Hallo,>> soweit ich weiß ost der SHT11 das "original" meiner benutzten FOST02.> Im Anhang mal der Code, den ich bei meinen Sensoren benutze.>> http://www.avr.roehres-home.de/sensoren/i_uni_sensor.html>> Gruß aus Berlin>> Michael
Jep, danke dir, werde mir das mal näher anschauen! Mit AVR GCC
compiliert?!
Simon K. schrieb:
> DDRB &= (1<<PD5);
Vielen Dank, jedoch funktioniert dies in MicroC so leicht leiter nicht
:D
Auch die normale Pinabfrage / Konfiguration mit PINB.B5 geht so leider
nicht. Da ist MicroC definitiv arg verschandelt. Selbst die Hilfe zu
MicroC bringt keinerlei Infos zu einzelnen Pin Befehlen. :/ Wie gesagt,
nächstes Projekt steige ich auf AVR-GCC um, um solche Probleme von
vornherein zu vermeiden!
Hallo,
Draco schrieb:
> Michael U. schrieb:>> soweit ich weiß ost der SHT11 das "original" meiner benutzten FOST02.>> Im Anhang mal der Code, den ich bei meinen Sensoren benutze.>>>> http://www.avr.roehres-home.de/sensoren/i_uni_sensor.html> Jep, danke dir, werde mir das mal näher anschauen! Mit AVR GCC> compiliert?!
Ja, die komplette Source ist auf meiner Webseite falls was fehlt.
PS: waren so ziemlich meine ersten C-Übungen, programmiere sonst den AVR
in ASM...
Gruß aus Berlin
Michael