PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RNMEGA2560 - BASCOM - I2C problem



wuppi
21.05.2007, 12:38
Hallo zusammen,

komme mir seit 2 Tagen recht blöd vor. Folgendes Problem:

SRF02 (Ultraschall Sensor) funktioniert an RN-Minicontrol problemlos.
Schliesse ich das Teil an RN-Mega 2560 Board (Port d0 und d1) an kommt nichts - die LED auf dem SRF02-Board blinkt nicht. PullUp-Widerstände (an SCL/SDA) sind angeschlossen, 5 Volt Stromversorgung kommen am Sensor an. Schliesse ich den Sensor wieder ans RN_Minicontrol an geht er wieder.

Hat jemand eine IDEE?

Danke im VORAUS.

Gruss

Wuppi

linux_80
21.05.2007, 17:50
Hallo,
hast Du evtl. einen anderen Slave zum Testen (zB.PCF8574) ?

Du kannst mal den Pegel der Leitungen messen, wenn nix übertragen wird, ob die auch wirklich high sind.

Sonst weiss ich grad nix, 2560 hab ich (noch) keinen.

wuppi
21.05.2007, 19:12
Hallo Linux_80,

einen neuen Slave (DS1621) habe ich mir gerade besorgt - werde ich morgen mal anschließen. Auf SDA und SCL liegen 4,93 Volt (Eingangsspannung am Board 5,06 Volt - oszi leider nicht vorhanden).

Was mich wundert ist die Angabe in BASCOM, da wird für SCL Port D7 angegeben. Habe aber im Programm Port D1 konfiguriert. In der def.dat steht auch Port D7 für SCL. Habe def.dat schon mal geändert und neu kompiliert - gleiches Verhalten.

linux_80
21.05.2007, 20:38
Wenn Du die Hardware verwendest, also kein Soft-I2C, sollte es mit D0 und D1 passen, egal was man sonst angibt.
Man muss nur die Lib einbinden, damit Bascom das TWI auch verwendet:


$lib "i2c_twi.lbx" ' we do not use software emulated I2C but the TWI
Config Twi = 100000 ' wanted clock frequency

Config Scl usw. braucht man dann nicht angeben.

Die Angaben in der .dat greifen normalerweise nur, wenn man im Programm nix anderes einstellt, und das Soft-I2C verwendet.
In meiner .dat passt das mit den Pins (1.11.8.6).

Läuft das Programm eigentlich durch (und gibts was falsches aus), oder bleibt es irgendwo hängen bei der Abfrage des SRF02 ?

wuppi
21.05.2007, 20:48
Hallo linux_80,

ich bin ehrlich, den Unterschied zwischen Hard- und Soft-I2C kenne ich nicht.
Also dazu erstmal ein großes Fragezeichen.

Die "lib" habe ich nicht eingebunden (sprich im Programm nicht erwähnt).

Ich benutze Bascom 1.11.8.7 und da stehts "falsch" drin.

Das Programm läuft durch. Als ergebnis erhalte ich leider nur nullen.

Das war der Versuch deine Ideen der Reihe nach zu beantworten.

Gruss

wuppi

Olle_Filzlaus
22.05.2007, 07:41
Hallo,

der Unterschied zwischen Hard und Sotfware ist recht einfach.

Die hardware macht die ganze Kommuniktaion über ein festverdrahteten Port. Also beim Atmega16 über D.0 und D.1.

Bei der Software "emuliert" der Atmega diesen port, deswegen kannst du den beliebig an dem Atmega anschließen.

Deswegen musst du dir erstmal überlegen was du machen willst. HArd oder software.

Dementsprechendd müssen, wie es linux_80 schon erklärt hat, ein paar zeilen programmcode rein.

und dann sollte es auch gehen.

cu arno

wuppi
23.05.2007, 19:52
Hallo zusammen,

nach dem mich mein Chef 2 Tage gequält hat nun das.

Habe einen neuen Slave (DS1621) angeschlossen, mit SoftwareI2C, mit Hardware I2C, ohne Erfolg.

Anschliessend dann am RNMinicontrol angeschlossen (gleiches Programm (ausser def.dat) - jetzt weiss ich wie warm es ist.

Vermutlich also ein verdrahtungsfehler.

Gruss

wuppi

wuppi
24.05.2007, 17:29
Hallo zusammen,

habe den I2C-Bus neu verdrahtet und gemessen - keine Unterbrechungen - keine Kurzschlüsse - Pullup´s gegen +5Volt.....alles OK

hier der Program code:

Hallo zusammen,

habe den I2C-Bus neu verdrahtet und gemessen - keine Unterbrechungen - keine Kurzschlüsse - Pullup´s gegen +5Volt.....alles OK

hier der Program code:

$regfile = "m2560def.dat"
$hwstack = 82 '80
$framesize = 68 ' 64
$swstack = 68 '44

$crystal = 16000000 'Quarzfrequenz

'$lib "i2c_twi.lbx"
'Config Twi = 100000 ' wanted clock frequency


' Printbefehle An Com4
Open "com4:" For Binary As #4

Config Scl = Portd.0 'Ports fuer IIC-Bus
Config Sda = Portd.1


Dim Device As Byte
Dim Deviceread As Byte
Dim Lowtemp As Byte
Dim Hightemp As Byte

Device = &H90
Deviceread = &H91

I2cinit

Print
Print "DS1621 Temperatur"

Do
I2cstart
I2cwbyte Device
I2cwbyte &HEE
I2cstop

I2cstart
I2cwbyte Device
I2cwbyte &HAA
I2cstop

I2cstart
I2cwbyte Deviceread
I2crbyte Lowtemp , Ack
I2crbyte Hightemp , Nack
I2cstop

Print Lowtemp ; ",";

If Hightemp = &H80 Then
Print "5";
Else
Print "0";
End If

Print " Grad Celsius"

Waitms 3800
Loop

End

wenn ich jetzt das Programm starte bekommen ich zarte 145 Grad angezeigt.
ohne Config TWI bekomme ich 72 Grad angezeigt. den Sensor abklemmt bekomme ich 72 Grad angezeigt.

ohne $lib i2c_twi.lbx kommt mir der frost hoch - 0 Grad werden angezeigt.

hat jemand eine Idee??????????????????

ich wollte nur einen Ultraschallsensor zur erkennung von Personen die einen Raum betreten einsetzen um das Licht einzuschalten. Wenn das alles nicht geht werde ich wohl oder übel einen ganz normalen TASTER nehmen.

gruss

wuppi

linux_80
24.05.2007, 18:28
Beim DS1621 muss man nach dem anstossen der Messung erstmal etwas warten, bis der Fertig gemessen hat (0.4 - 1s), sonst kann allesmögliche rauskommen !

Nach einem Reset (bzw. Spannung einschalten), kommt als erstes immer -60 Grad raus, wenn man zu schnell ausliest.

wuppi
25.05.2007, 16:51
Hallo zusammen,

da mich jetzt die Forscherwut erwischt hat stelle ich mir (als Neuling in der Technik) eine Frage.

Wie oft läst sich so ein Chip eigentlich Programmieren?

Fragenden Gruß

Wuppi

linux_80
25.05.2007, 17:20
Welchen Chip meinst Du, den AVR ?
Dann solltest Du zur Forscherwut die Lesewut dazupacken, und das Datenblatt des AVR reinziehen, gibts bei Atmel .
10.000 mal gehts mind., steht gleich auf der 1. Seite jedes AVR DB.

wuppi
25.05.2007, 17:23
Hallo linux_80,

sorry, habe die 440 Seiten neben mir liegen, aber nicht alle gelesen. Wenn´s, wie hier in englisch ist, lese ich nur das nötigste.

VIELEN VIELEN DANK für deine Antwort

Gruss

wuppi

wuppi
25.05.2007, 18:35
Hallo zusammen,

jetzt behaupte ich doch das (zumindest die Version 1.11.8.7) BASCOM im Bereich des I2C/TWI ne macke hat.

Habe folgenden Code benutzt und der Sensor (zumindest der DS1621) gibt mir Daten und zwar vernünftige.

$regfile = "m2560def.dat"
$hwstack = 82 '80
$framesize = 68 ' 64
$swstack = 68 '44

$crystal = 16000000 'Quarzfrequenz

' $lib "i2c_twi.lbx" ' we do not use software emulated I2C but the TWI
$lib "i2c.lbx"
Config Twi = 400000 ' wanted clock frequency

' Printbefehle An Com4
Open "com4:" For Binary As #4

Config Scl = Portb.6 'Ports fuer IIC-Bus
Config Sda = Portb.7


Dim Device As Byte
Dim Deviceread As Byte
Dim Lowtemp As Byte
Dim Hightemp As Byte

Device = &H90
Deviceread = &H91

I2cinit

Print
Print "DS1621 Temperatur"

Do
I2cstart
I2csend Device , &HEE
I2cstop

I2cstart
I2csend Device
I2csend Device , &HAA
I2cstop
Wait 1

I2cstart
I2creceive Deviceread , Lowtemp
I2creceive Deviceread , Hightemp
I2cstop

Print Lowtemp ; ",";

If Hightemp = &H80 Then
Print "5";
Else
Print "0";
End If

Print " Grad Celsius"

Loop

End


Mit LOGIK hat das wohl nichts zu tun.....oder?