I2C am ATmega16 geht nicht mit beliebigen Pins

#2430857
Lesenswert?

Hallo µC-Freunde,
ich bin neu hier angemeldet und das ist also mein erster Hilferuf. :-)
 
Ich habe an den TWI Pins PC.0 und PC.1 eines ATmega16 per PCF8574 ein 
Text-LCD angeschlossen. Das funktioniert mit folgendem Code auch so wie 
es soll.
 
1
$regfile = "m16def.dat"                                     'ATmega16-Deklarationen
2
$lib "Lcd_i2c.lib"
3
$crystal = 3686400
4
$hwstack = 100                                              'Quarz Frequenz
5
 
6
Const Pcf8574_lcd = &H40
7
Config Scl = Portc.0
8
Config Sda = Portc.1
9
 
10
Dim _lcd_e As Byte
11
_lcd_e = 128
12
 
13
Cls
14
Locate 1 , 3
15
Lcd "1234567890"
16
 
17
End
 
Wenn ich jetzt nur die I2C Pins auf PC.4 & PC.5 ändere und das LCD 
umklemme, funktioniert es leider gar nicht mehr. PullUps sind vorhanden.
 
1
$regfile = "m16def.dat"                                     'ATmega16-Deklarationen
2
$lib "Lcd_i2c.lib"
3
$crystal = 3686400
4
$hwstack = 100                                              'Quarz Frequenz
5
 
6
Const Pcf8574_lcd = &H40
7
Config Scl = Portc.4
8
Config Sda = Portc.5
9
 
10
Dim _lcd_e As Byte
11
_lcd_e = 128
12
 
13
Cls
14
Locate 1 , 3
15
Lcd "1234567890"
16
 
17
End
 
Danke für einen hilfreichen Tipp
Gast #2430950
Lesenswert?

Uwe N. schrieb:
> das könnte daran liegen, das die BASCOM (nehme ich mal an) Lib nur
> direkt die eingebaute TWI Hardware nutzt und nicht emuliert (sowas wie
> Software TWI).

Ohne einbinden der i2c_TWI.lib nimmt Bascom Soft-TWI, welches mit allen 
geeigneten Pins arbeitet. Spess hat recht, es ist das JTAG, ein 
"Klassiker" unter den gern gemachten Fehlern. Wie auch nicht vorhandene 
oder unvollständige Stackdeklarationen gerne zu Problemen führen...
Gast #2431028
Lesenswert?

Frank Höhn schrieb:
> Na toll, das Klische ist perfekt: Und wieder macht ein Anfänger die
> klassischen Fehler.

Ja, so ist's halt, zu Beginn sind's fast immer die selben Fehler, Pin 
per Port abgefragt, oder auch die gesetzte CLKDIV-Fuse, bei Bascom sehr 
beliebt auch das Einschalten des UART sobald $baud = ... verwendet wird, 
mit der Folge daß RXD/TXD blockiert sind.

Aber das ist kein Grund sich für Anfängerfehler zu genieren, mit 
zunehmender Erfahrung werden die gemachten Fehler schon noch komplexer 
:D

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