Forum: Mikrocontroller und Digitale Elektronik i2c-problem mit bascom und Mega16


von Tobi (Gast)


Lesenswert?

Hallo!

Ich habe ein Problem mit dem I2C beim Mega16 und Bascom.
SDA und SCL sind über je 5,6kOhm nach VCC gePullUpt.
Ich habe testweise ein LCD, das über 2 PCF8574 angesteuert wird
dranhängen. Das Problem: Den Avr verlässt kein einziges Signal.
Er zieht die Leitungen nicht runter, also keine Startbedingungen usw.
Ich hab's mit dem Oszi nachgemessen.

Mein Code:



'===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


Start:

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



Was ich auch schon gestestet habe:



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

   I2csend D , &B00000000

Waitms 25

   I2csend B , &B00001100

Waitms 25

   I2csend D , &B10000000

Waitms 25

   I2csend D , &B00000000

Waitms 25

   I2csend B , 97

Waitms 25

   I2csend D , &B10000000

Waitms 25

   I2csend D , &B00000000

End



Alles ohne Erfolg.
Braucht man irgendwelche Libraries oder so? Was mache ich falsch?

Ich bedanke mich schonmal...

Liebe Grüße,
Tobi

von anfänger (Gast)


Lesenswert?

ich hab zwar noch nie was mit i2c gemacht, aber ich sag trotzdem mal
was:

bist du sicher, dass die slave-adressen der controller stimmen?

bist du sicher, dass pull-ups notwendig sind? hast du es schonmal ohne
probiert?

muss man evt. interrupts oder sowas aktivieren?

misst du auch am richtigen port?

ich weiß, sind alles blöde fragen aber "nobodys perfect". also mal
schnell überprüfen!

mfg, anfänger.

von Tobi (Gast)


Lesenswert?

HI Anfänger!

Die Addressen, sind im Moment noch unwichtig. Die zählen erst, wenn was
zum I2C rauskommt.

PullUps sind auf jeden Fall nötig.

Sonst sollte alles stimmen...

Aber irgendwo muss ja der Fehler liegen...

Liebe Grüße,
Tobi

von Andreas Hesse (Gast)


Lesenswert?

Hallo,

hast Du unter Options -> Compiler -> I2C die PINs eingestellt.

Ich habs mal mit meinen Versuchen verglichen:
Ich hatte die Definitionen nicht in den Code geschrieben, sondern nur
im genannten Menue eingestellt. Das lief problemlos (allerdings nicht
am Mega16).

Vielleicht gibts noch ein Problem mit dem Hardware TWI. (obwohl das
eigentlich nichts machen sollte)

Gruss
Andreas

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.