Hygrosens I2C Bus Spec

Gast #1154195
Lesenswert?

Ich habe die AVRLIB.ZIP von Pascal Stang.
Da ist ein I2C Bus Treiber drinnen, der - ich hoffe ich habe diesen Bus 
richtig verstanden - es ermöglicht mit einem Baustein zu plaudern.

Dann braucht man scheinbar einen Treiber, der an die entsprechenen 
Register des Bausteines und dessen Verhalten angepaßt ist. Dort ist das 
der DS18irgendwas glaub ich.

Genau dieses Ding brauche ich. In der Spezifikation von Hygrosens ist 
immer die Rede von deren USB Interface für einen PC, von EEPROM und RAM 
usw. Keine Ahnung wozu dieses Zeug alles gut ist. Mir fehlt da noch der 
Durchblick !
Gast #1154217
Lesenswert?

Hi

>Das ist genau das, was ich gerade mit Kopfschütteln und Verzweiflung
>gelesen habe.

Ich dachte eher daran, das du uns daran teilhaben könntest. Die 
Hygrosens Webseite ist leider etwas unübersichtlich.

MfG Spess
#1154888
Lesenswert?

Hallöchen,
mal zum Verständis: Der I2C-Bus wie auch der SPI-Bus wie auch so 
ziemlich jeder andere Bus dieser Welt läßt zwei Operationen zu:
1) Daten lesen
2) Daten schreiben

Das ist das, was dein I2C Bus Treiber aus der Pascal Stang lib leisten 
wird.
Was du jetzt brauchst, ist eine Implementierung des Protokolls des 
TEMOD-I2C, wie es ab Seite 14 in dem PDF beschrieben ist.
Und du brauchst ein weiteres Dokument, in dem der Speicheraufbau des 
Gerätes beschrieben ist, denn die Kommandos da dienen in erster Linie 
dazu diverse interne Speicher deines TEMOD auszulesen und zu 
beschreiben.

Hoffe geholfen zu haben
Gast #1156446
Lesenswert?

Ich habs jetzt nach kurzer Rückfrage bei Hygrosens geschafft 
(ausgezeichnet guter Support!!): Man muß eben von der I2C Adresse 0x78 4 
Bytes lesen. Das ist dann die am Bus angelegte Adresse 0xf1.

Warum man da nicht auf eine Flag warten muß und wieso das ratiometrisch 
und trotzdem linear mißt werde ich auch noch klären.

PS:  Hat jemand die Email von Pascal Stang ? In seiner Library ist ein 
Fehler.
#1534074
Lesenswert?

Hallo..

ich habe den gleichen Sensor und bekomme leider nur 4x 0xFF ausgelesen.

Wo liegt mein Fehler ?

F_CPU = 4Mhz
Ich nutze die im Anhang beigefügte I2C Software.


main.c
-----
1
#include <avr/io.h>
2
#include <avr/wdt.h>
3
#include <avr/interrupt.h>
4
#include <util/delay.h>
5
#include <avr/eeprom.h>
6

7

8
#include "i2c_software_master.h"
9

10
void answer_uart(unsigned char c){
11
while (!(UCSRA & (1<<UDRE)))  /* warten bis Senden moeglich                   */
12
    {
13
    }
14
 
15
    UDR = c;
16
}
17

18

19
// USART Init
20
void init_uart(void) 
21
{
22
  UBRRL = 25;
23
  UCSRB = UCSRB | (1<<RXEN) | (1<<TXEN) | (1<<RXCIE);
24
  
25
  UCSRC = (1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0);
26

27
}
28

29

30
int main(void)      // Mainprogramm
31
{
32

33
  init_uart();
34
  _delay_ms(1000);
35
  
36
  answer_uart(0x06);
37
  _delay_ms(1000);
38
  
39

40

41

42
  
43
  i2c_master_init();
44
//  i2c_master_start();
45
  
46
//  i2c_master_write(0xf0);  
47
//  i2c_master_write(0x00);
48
  
49
  i2c_master_start();
50
  i2c_master_write(0xf1);
51
  
52
  uint8_t a = i2c_master_read(1);
53
  uint8_t b = i2c_master_read(1);
54
  uint8_t c = i2c_master_read(1);
55
  uint8_t d = i2c_master_read(0);
56
  
57
  i2c_master_stop();
58
  
59
  answer_uart(a);
60
  answer_uart(b);
61
  answer_uart(c);
62
  answer_uart(d);
63

64
  
65
}

Vielen Dank, Markus
Angehängte Dateien:
#4253387
Lesenswert?

Also das Modul geht mit der Beschaltung.
Analog sowie auch Digital.

Habe den Bus mal gescannt mit einem Programm im BASCOM da ich nix 
vernünftiges in c oder so gefunden habe.

Und siehe da das Modul ist vorhanden mit der Write Adresse 0xF0 und mit 
der Read Adresse 0xF1 was ja 0x78 schifft nach links +0 für Write oder 
+1 für Read entspricht.

Soweit alles super

Dann habe ich das BASCOM Programm geändert so das die Werte( 2 Bytes ) 
gelesen werden.
Und Hurra ja das geht auch.

Jetzt gibt es nur das Problem das mein eigentlich Programm in den der 
Code eingefügt werden soll in c und nicht in BASCOM geschrieben ist.

Und ich habe bestimmt 5 oder noch mehr verschiedene I2C/TWI C-Codes 
ausprobiert.

und keiner läuft mit dem Modul
Init geht
Send START condition geht

und danach geht nix mehr.

Jetzt muss ich mal blöd fragen was macht BASCOM anders das es damit 
geht.
Unter anderem läuft so ein Modul bei einigen auch auf einem arduino.
http://forum.arduino.cc/index.php?topic=90805.0


ich habe mal das BASCOM "test" Programm angehängt.

Wenn ich die selben schritte mit avr-C mache läuft es nicht.
Also irgendwo sind da Unterschiede in den I2C Routinen zwischen BASCOM 
und den bekannten I2C avr c-Routinen.

Zur arduino Routine kann ich nix sagen habe nur gelesen das es auf dem 
arduino läuft und auch der Programm Code die machen genau das selbe wie 
ich im BASCOM oder im avr-C nur mit letzterm läuft es nicht. :-(


Mir fällt langsam nix mehr ein.

Daher fragte ich ob jemand das Ding am laufen hat mit einem AVR und 
einem c-Code.
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren