PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I²C Problem mit Mega16 und BASCOM...



tobimc
03.10.2004, 13:20
HI!

Ich habe mich letztens entschlossen, ein I²C Display zu bauen.
Das ist jetzt fertig, aber der I²C mit dem Mega 16 funktioniert nicht.

SCL ist wie im Datenblatt auf Portc.0, SDA ist wie im Datenblatt auf
Portc.1.

Folgender Quelltext in BASCOM:

'===CONFIGURATIONS===
$baud = 9600
$crystal = 16000000
$regfile = "m16def.dat"

Config Pinc.6 = Output '595 Load-Leitung
Config Pinc.7 = Output '595 Takt
Config Pina.1 = Output '595 Daten

Config Pina.0 = Input '165 Daten
Config Pinb.1 = Output '165 Takt
Config Pinb.0 = Output '165 Load

Config Scl = Portc.0 'I²C SDA
Config Sda = Portc.1 'I²C SCL


'===ALIASE
Beep Alias Portd.2

'===VARIABLEN===

Dim A As Byte
Dim B As Byte
Dim D As Byte
Dim E As Byte

Dim F As Byte
Dim S As Byte

'===PROGRAMMBEGINN===

Begin:

I2cinit

Sound Beep , 250 , 1000 'Ein bisschen gepiepse zum Anfang...
Sound Beep , 250 , 900
Sound Beep , 250 , 800
Sound Beep , 500 , 500


Starting:

Waitms 500 'Watren


'====Eigentlicher PROGRAMMSTART====


Source: 'TESTPROGRAMM

B = &B01110001 'Addresse des PCF8574 mit DB0-DB7 am Ausgang...
D = &B01110011 'Addresse des PCF8574 mit RS, E und R/W am Ausgang...

I2cstart
I2cwbyte D
I2cwbyte &B00000000
I2cstop

Waitms 25

I2cstart
I2cwbyte B
I2cwbyte &B00001100
I2cstop

Waitms 25

I2cstart
I2cwbyte D
I2cwbyte &B10000000
I2cstop

Waitms 25

I2cstart
I2cwbyte D
I2cwbyte &B00000000
I2cstop

Waitms 25

I2cstart
I2cwbyte B
I2cwbyte 97
I2cstop

Waitms 25

I2cstart
I2cwbyte D
I2cwbyte &B10000000
I2cstop

Waitms 25

I2cstart
I2cwbyte D
I2cwbyte &B00000000
I2cstop


End
(Ich habe ihn der Übersicht wegen etwas gekürzt... Funktionen weggelassen usw...)

Das Tolle: Laut meinem Scope kommt nix aus den Ausgängen raus.

Meine Bascom-Version: 1.11.7.4

Achso und das Display ist wie auf:
http://www.destroy-yourself.de/julian/juliprograms/amr/i2clcd.htm
nur mit 2x20 Zeichen.
Es wird mit 2 PCF8574P angesteuert.

Nicht das ihr mich jetzt falsch versteht; aus dem I²C kommt nix raus,
und deshalb funzt das LCD nicht. Das LCD ist im Moment nur Nebensache.

Auf der I²C Verteilerplatine gehen 2 PullUps von je 5,6kOhm von SCL und SDA nach VCC.

Was ist hier falsch? Ehrlich gesagt weis ich nicht, wo ich suchen soll...

Vielen Dank schon jetzt mal...

Liebe Grüße, Tobi

Frank
03.10.2004, 13:37
Was mir auf den ersten Blick falsch erscheint ist die I2C-Adresse deiner PCF Bausteine. Wenn du ein Byte schreiben willst, dann muß Bit 0 der Slave Adresse immer Low sein. Bei dir ist das Hex 71, das kann also nicht hinkommen. Hex 71 ist nur zum lesen von Werten geeignet. Vermutlich ist daher die Hex Adresse für Schreiboperationen bei Dir Hex 70.
Also probier damit mal dein Glück.

Gruß Frank

tobimc
03.10.2004, 13:53
Hi Frank!

Kann gut sein, dass die Addressen falsch sind ;). Aber es kommt ja zu
den Pins nix raus...

Aber ich werde jetz mal kurz die Addressen ändern.
Du meinst die Addressen müssen so aussehen:

B = &B01110000 'Addresse des PCF8574 mit DB0-DB7 am Ausgang...
D = &B01110010 'Addresse des PCF8574 mit RS, E und R/W am Ausgang...

Also das R/W-Bit auf 0. OK.
Ich test's mal.

Ich werde berichten...

Liebe Grüße, und Danke!
Tobi

Florian
03.10.2004, 13:55
Das Tolle: Laut meinem Scope kommt nix aus den Ausgängen raus.

Hi Tobi!
Ich beneide Dich um das Oszi! *auch haben will*
Wo hast Du Dir das gekauft?
Wie teuer war das?
Wie heißt es?

tobimc
03.10.2004, 14:06
HI!

Also, an SCL und SDA liegt der normale 5V-Pegel an (PullUp). Der Atmel zieht das nicht runter. Keine Startbedingung, kein garnix.
Selbst mit Trigger und einer Auflösung von 1µS kann ich nicht das geringste Signal erkennen.

@Florian:
Seid ihr nicht auf Klassenfahrt? *verwirrt*
Das Speischeroszi ist schon etwas älter, hat mein Vater schon vor 1-3 Jahren be Big-C bestellt. Man schliesst es an einen PC an.
Wie es heißt... muss ich mal nachgucken.
Inzwischen gibt's neuere und bessere aber die sind nicht ganz billig.
Zu Weihnachten und Ostern lohnt sich das aber auf jeden Fall!

Viele liebe Grüße, Tobi

Florian
03.10.2004, 14:27
Hi Tobi!
Ich bin erst ab Montag (Morgen) auf Klassenfahrt!
Ich habe auch schon drüber nachgedacht, ob ich mir eins kaufe, angestoßen von der aktuellen Ausgabe der Elektor.
Naja, mal sehn, derzeit passen sie leider nicht in meinen Ethar! :o(

tobimc
03.10.2004, 20:17
HI!

Wes denn niemand, was falsch läuft? Das ist echt komisch!

@Florian:
das ist halt der ENORME Nachteil von den Dingern...
Sie sind schweineteuer.

Liebe Grüße an alle,
Tobi

Florian
03.10.2004, 20:22
Jup, leider! :o(

Frank
03.10.2004, 21:01
Ist mir unverständlich tobimc,
normalerweise muss da was raus kommen. Wenn kein Messfehler vorliegt kann ich mir nur vorstellen das Port im Eimer ist, mehr fällt mir dazu auch nicht ein.
Zumindest beim Mega8 hab ich schon oft andere Pin´s als I2C benutzt, das sollte auch beim Mega16 unproblematisch sein. Allerdings hatte ich beim Mega16 gerne die Hardware I2C-Pins genommen, auch wenn ich die Bascom Befehle (Software Ansteuerung) nutze. Man kann dann später einfach auf Hardware-TWI Ansteuerung wechseln ohne die Schaltung zu ändern.

Steinmader
20.10.2004, 12:54
Hallo tobimc,
Kannst du mir den vollständigen Quelltext Senden.

tobimc
20.10.2004, 16:04
HI!

Also, bei mir wars so, dass ich die lib i2c.xxx einbinden musste, dann kann man mit i2csend und i2crecieve senden und empfangen.

Also:

$lib "i2c.lib"

I2cinit

I2csend &H42 , 0
Waitms 2
I2csend &H40 , 255

So sollte es tuten.

Liebe Grüße,
Tobi

avatar
21.10.2004, 10:36
Kannst du mir den vollständigen Quelltext Senden.Den vollständigen Quelltext findest du in dieser Thread:
https://www.roboternetz.de/phpBB2/viewtopic.php?t=3937

Das Problem das dort diskutiert wird (Zeilenumbruch) wurde inzwischen auch gelöst. Es fehlte lediglich eine Abfrage. Das Display funktioniert jetzt einwandfrei.

Steinmader
22.10.2004, 14:44
Vielen Dank avatar für den link.
Hat mir ein bischen weiter geholfen,
hat aber noch jemand
ein I2C Beispiele für einen AT 90S2313 PDIP.