Hallo Leute,
ich habe hier einen AM2320 Temperatur&Feuchte-Sensor an einem ATMEGA88.
Ich bring den Sensor einfach nicht zuverlässig zum Laufen. Sporadisch
hat es schon geklappt, daher glaube ich, dass es nur an einer
Kleinigkeit liegen kann.
Ich vermute, dass es am WakeUp-Befehl scheitert (Datenblatt-Auszug habe
ich angehängt).
Der Witz: Mit der Arduino-Lib "AM232X" von Rob Tillaart funktioniert es
sehr zuverlässig. Obwohl die 800µs nicht eingehalten werden.
(wenn ich das Datenblatt richtig interpretiere muss ich das eh nicht?
Der uC macht das automatisch?)
Ich habe versucht die Lib nachzubauen. Mit der I2C von Peter Fleury.
Hier mal ein Auszug, mit dem ich den Screenshot vom Logic-Analyzer
gemacht habe)
1 | bool AM2320_init()
|
2 | {
|
3 | i2c_init();
|
4 | if (!AM2320_wakeup(30)) //wake up is min 800 us max 3000 us
|
5 | {
|
6 | return false;
|
7 | }
|
8 | return true;
|
9 | }
|
10 |
|
11 | bool AM2320_wakeup(uint16_t timeout)
|
12 | {
|
13 |
|
14 | i2c_start(AM2320_ADDRESS + I2C_WRITE);
|
15 | _delay_us(800); // Hier habe ich schon mit div. Zeiten experimentiert
|
16 | i2c_stop();
|
17 |
|
18 | return true;
|
19 | }
|
Was Auffällig ist, ist, dass bei der Wire-Lib eine lange Zeit SCL und
SDA
gemeinsam auf Low sind - wie im Datenblatt. Hier denke ist der Grund,
warum es bei mir nicht funktioniert.
Hab ihr eine Idee wo ich hier ansetzen kann, dass ich SCL und SDA vom
Timing auch so hinbekomme??
Beim Adruino klappts auf einem ATMEGA328 mit dem Timing ja auch. Da
sollte um ATMEGA88 nicht so viel anders sin.