Forum: Mikrocontroller und Digitale Elektronik Hygrosens I2C Bus Spec


von Mario (Gast)


Lesenswert?

Ich habe den TEMOD-I2C von Hygrosens. Habe die Doku und deren I2C 
Beschreibung heruntergeladen, ich verstehe bloß rein gar nichts.

Hat jemand dieses Teil (mit einem AtMega) auf dem I2C Bus zum Laufen 
gebracht ?


Danke im Voraus !

von was-willst-du (Gast)


Lesenswert?

wo ist das problem ?
i2c ist i2c, kann man über assembler, c, basic ansprechen.

was geht denn nicht ?

von Mario (Gast)


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 !

von spess53 (Gast)


Lesenswert?

Hi

Datenblatt?

MfG Spess

von Mario (Gast)


Lesenswert?

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

Mario

von spess53 (Gast)


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

von Mario (Gast)


Lesenswert?

Hier ist die Spec im Anhang.

von Mario (Gast)


Angehängte Dateien:

Lesenswert?

mal sehen ob es so geht

von Jan K. (jeangonzales)


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

von spess53 (Gast)


Angehängte Dateien:

Lesenswert?

Hi

Lt. Datenblatt musst du nur 2 Werte auslesen. Also kein Drama.

MfG Spess

von Mario (Gast)


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.

von Markus C. (ljmarkus)


Angehängte Dateien:

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

von Frank X. (matrixx200x)


Lesenswert?

Hat das jetzt schon mal jemand zum laufen bekommen, und zufällig eine 
laufenden c-Code.

Ich bekomme es egal mit welchem I2C/TWI C-Code zum laufen.

Oder das Modul ist defekt.

Von daher wäre ich für einen laufen Code sehr dankbar.

Gruss

von Frank X. (matrixx200x)


Lesenswert?

sollte heissen.

Ich bekomme es egal mit welchem I2C/TWI C-Code nicht zum laufen.

von Tom E. (Gast)


Lesenswert?

Frank W. schrieb:
> Ich bekomme es egal mit welchem I2C/TWI C-Code zum laufen.

Woran fehlt es denn. Kommt auf dem I2C-Bus das Acknowledge vom Baustein 
nicht, sind die Werte anders als du denkst, kommt am Analogausgang nicht 
das Richtige raus?

Da gibt es viele Möglichkeiten.

von Frank X. (matrixx200x)


Angehängte Dateien:

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.

: Bearbeitet durch User
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
Noch kein Account? Hier anmelden.