Archiv verlassen und diese Seite im Standarddesign anzeigen : Hardware I2C bei M16 in Bascom
Hallo Leute,
wie spricht man den I2C-Bus von einem ATMega16 in Bascom an?
Die Slave-Beispiele von Bascom funktionieren nur mit den kleineren AVR's.
In den Bascom-Hilfe-Dateien steht, dass man beim M16 den
Hardware-I2C verwenden soll, was ja auch sinnvoll wäre.
Doch wie spricht man ihn an, ich finde dafür leider nur
Assembler-Beispiele.
Bin dankbar für jede Hilfe.
mfg
sam86
Hi sam86!
Wo hast Du die ganzen Assembler-Beispiele gefunden?
Ich finde nämlich kaum welche! :o(
Für Bascom findest Du was in der Artikelliste ganz oben! :o)
TWI!
HI!
Habe auch gerade ein Problem mit dem I²C und dem Mega16.
Kann es sein dass das NUR auf diesen Pins funktioniert??
Viele Grüße,
Tobi
Auf welchen PIN´s der I2C Bus liegt kann in Bascom ja frei gewählt werden. Derzeit wird nicht der Hardware I2C-Bus genutzt, vemutlich ist dies aber ab der nächsten Version der Fall.
Momentan kannst du die Bascom I2C Befehle mit beliebigen PIN´s nutzen. DIe PIN´s kannst du so einstellen:
Config Scl = Portc.0 'Ports fuer IIC-Bus
Config Sda = Portc.1
HI Frank!
Ich habe das so gemacht, aber es kommt laut Speicheroszilloskop nix raus! Pullups usw...
Mein Quellcode:
Config Sda = Porta.0 'I²C SDA
Config Scl = Porta.1 'I²C SCL
Beep Alias Portd.2
595dat Alias Portc.6
595takt Alias Portc.1
595act Alias Portc.0
165dat Alias Pinc.7 '!!WICHTIG: Beim EINLESEN IMMER PinX.Y
165takt Alias Portb.1
165act Alias Portb.0
'===FUNKTIONEN===
Declare Function 595akt() As Byte
Declare Function Get165() As Byte
Declare Function Send_to_slave() As Byte
Declare Function Slv_input() As Byte
Declare Function Errorbeep(byval Number As Byte) As Byte
Declare Function Sirene(byval Oft As Byte) As Byte
Declare Function Rechts_vor() As Byte
Declare Function Rechts_rueck() As Byte
Declare Function Rechts_stop() As Byte
Declare Function Links_vor() As Byte
Declare Function Links_rueck() As Byte
Declare Function Links_stop() As Byte
Declare Function Beide_vor() As Byte
Declare Function Beide_rueck() As Byte
Declare Function Beide_stop() As Byte
Declare Function Beide_links() As Byte
Declare Function Beide_rechts() As Byte
Declare Function Mstop() As Byte
'===VARIABLEN===
Dim A As Byte
Dim B As Byte
Dim D As Byte
Dim E As Byte
Dim Tmpink As Byte
Dim 165pinstate(2) As Byte
Dim 595pinout(3) As Byte
Dim F As Byte
Dim S As Byte
Dim Actualslaveip As Byte
Dim Stscom As String * 4
Const 595online = 2 + 1
Const 165online = 1 + 1
'===PROGRAMMBEGINN===
Begin:
595act = 0 'activate '595 auf null
595takt = 0 'takt
595dat = 0 'data
165act = 1 'activate '595 auf null
165takt = 0 'takt
S = Asc( "s" ) 'S für success
F = Asc( "f" ) 'f für failure
595pinout(2) = 0 '595er auf null
595pinout(3) = 0
A = 595akt()
Sound Beep , 250 , 1000 'Ein bisschen gepiepse zum Anfang...
Sound Beep , 250 , 900
Sound Beep , 250 , 800
Sound Beep , 500 , 500
Starting:
A = Sirene(3) 'IICCCCCCCCCCHHHHHHHHHHH KKKOOOOOOMMMMMMMMMMMMMMMMMMMMMMMMMMEEEEEEEE!!
Waitms 500 'Watren
'====Eigentlicher PROGRAMMSTART====
Source: 'TESTPROGRAMM
B = &B01110001 'Addresse des Datenchip Daten
D = &B01110011 'steuer
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 'ENDE!!
Ich weis, es gibt dieses Codefenster, aber ich find's so übersichtlicher...
Zu den Pins kommt absolut nada raus. Meine Pullups sind 5,6kOhm.
Achso, ich steure damit 2 PCF8574P an. Das ist ein LCD wie auf
http://www.destroy-yourself.de/julian/juliprograms/amr/i2clcd.htm
Ich schätze, dass es irgendwie an der Programmierung liegt, aber...
Ihr kennt euch da besser aus. Bin I²C Noob.
Viele liebe Grüße,
Tobi
fehlt da nicht der i2cinit ???
Hi!
Siehe PM... keine Ahnung! das Buch das ich habe, ist dazu etwas ungeeignet.
Viele liebe Grüße, Tobi
Hi!
@Florian: Die Asm-Beisp. waren im Datenblatt vom M16.
Für den Master müssten doch die Befehle I2csend und I2creceive funktionieren. Doch die Bascom-Beispiele für den Slave funktionieren nicht mit dem M16. Der Compiler meldet dann, dass das I2C-Library nicht mit dem M16 funktioniert.
Hi sam86!
Danke für den Tipp, da ich derzeit nur den Mega8 benutze, habe ich das völlig übersehen!
Danke nochmals! :o)
Hi,
vielleicht sollte ich meine Frage mal anders formulieren:
Wenn die BasCom-Hife meint, ich soll die "harware I2C implementation" verwenden, dann heißt das doch, dass ich die Steuerregister setzen und die Interupts verwalten soll.
Blos wie kann ich in BasCom die Register setzen und die Interrupts verwalten?
In Bascom kann man ganz genauso wie in C auf alle Register direkt zugreifen. Die Syntax ist sogar nahezu gleich.
Aber das wäre im Falle von TWI etwa sfür den erfahreneren AVR Programmierer. Ich würde zu den Bascom I2C Befehlen raten.
Bezüglich oberen Problem bitte auch Thread https://www.roboternetz.de/phpBB2/viewtopic.php?t=3742 beachten
OK. Wird wohl im Moment die beste Lösung sein.
Die Master-Samples gehn einwandfrei.
Blos beim Slave-Beispiel kommt die Fehlermeldung, dass er die "I2CSLAVE.LBX" nicht findet, und sie ist auch nicht im LIB-Verzeichnis.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.