Forum: Mikrocontroller und Digitale Elektronik I2C am ATmega16 geht nicht mit beliebigen Pins


von Frank H. (hoehnsfrank)


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

von spess53 (Gast)


Lesenswert?

Hi

>Danke für einen hilfreichen Tipp

JTAG abschalten.

MfG Spess

von Uwe N. (ex-aetzer)


Lesenswert?

Hallo Frank,

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).
In so einem Fall geht das natürlich nur an den dafür vorgesehenen Pins 
PC0 und PC1.

Nur geraten, kenn mich mit BASCOM nicht aus.

Gruss Uwe

von Frank H. (hoehnsfrank)


Lesenswert?

Hallo Spess,
klingt Plausiebel. Laut Datenblatt wird der ATmega mit aktiviertem JTAG 
geliefert. Das könnte auch der Grund sein, weshalb ein direkt am PortC 
angeschlossenes LCD nicht funktioniert.
Ich werde das morgen gleicht Testen.
Schon mal vielen Dank für den 'hilfreichen Tip'. :-)

Gruß,
Frank

von MWS (Gast)


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...

von Frank H. (hoehnsfrank)


Lesenswert?

Na toll, das Klische ist perfekt: Und wieder macht ein Anfänger die 
klassischen Fehler.

Danke für die schnelle Hilfe, das wird mir weitere Stunden erfolgloser 
Sucherei ersparen.

von MWS (Gast)


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

von Uwe N. (ex-aetzer)


Lesenswert?

MWS schrieb:
> Ohne einbinden der i2c_TWI.lib nimmt Bascom Soft-TWI, welches mit allen
> geeigneten Pins arbeitet.

Ah, danke für den Hinweis.

Gruss Uwe

von Frank H. (hoehnsfrank)


Lesenswert?

Kaum macht man's richtig, schon geht's.
Danke für die Hilfe.

Gruß,
Frank

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.