Hallo, ja den gibt es natürlich.
DDRC |= SCL //SCL als Ausgang definieren
PORTC |= SCL //SCL high
PORTC &=~ SCL //SCL low
mfg
Hallo erstmal.
Falls ich ein neues Thema eröffnet habe und es schon eines gibt, entschuldige ich mich dafür, aber ich habe irgendwie bei meiner langen Suche nichts passendes gefunden.
Man findet diverse Programme, Codes und sonst was um ein Servo (z.B.) über den SCL Pin zu steuern. Diese ganzen Dinge funktionieren auch perfekt, aber es müsste theoretisch doch möglich sein, den SCL genau so wie die LEDs auf der BasePlatine von LOW auf HIGH zu setzten.
Bei den LEDs kann man ja auch setLed(0b...) verwenden. Es müsste doch so einen ähnlichen Befehl für den SCL Pin auch geben, genau so wie für INT1-3 ... auch wenn diese schon anders verwendet werden.
Gibt es einen so einen Befehl überhaupt???
Ich würde mich sehr über hilfreiche Antworten freuen.
Hallo, ja den gibt es natürlich.
DDRC |= SCL //SCL als Ausgang definieren
PORTC |= SCL //SCL high
PORTC &=~ SCL //SCL low
mfg
ist die defintion von SCL irgendwo in der RP6 lib zu finden ?
ich meine dass das so "einfach" nicht funktioniert!
exakt müsste es heissen
wobei das kleine n durch die pinnummer des SCL pin ersetzt werden muss ... ausserdem gibt das makro PCn (und SCL vermultich auch) nur die bitposition des pins im register wieder, daher muss man eine 1 um n bits nach links schieben um den entsprechenden pin auch anzusteuern ... sonst kommt da nur die binäre darstellung den zahl hinter SCL raus vermutlichCode:DDRC |= (1<<PCn); //SCL als Ausgang definieren PORTC |= (1<<PCn); //SCL high PORTC &=~ (1<<PCn); //SCL low
kann ich scl auch von der m32 aus auf high/low setzen, diese ist ja mit dem scl vom rp6 über den Xbus verbunden?
Mit hochohmigen Grüßen
Virus
Es lebe der Digitalkäse !
Wenn mehrere Geräte am I2C Bus angeschlossen sind, sollte man diesen üblicherweise auch als I2C Bus verwenden und für nix anderes![]()
Wenn nur ein Mikrocontroller dranhängt ists natürlich egal und man kann mit den Pins machen was man will.
Wenn mehrere Controller am Bus hängen, Du aber auf den Bus verzichten kannst, musst Du sicherstellen das der Pin niemals aktiv auf HIGH geschaltet wird.
Das erledigt der Pullup Widerstand auf dem Mainboard.
Alle am I2C Bus angeschlossenen Geräte schalten nur nach LOW.
Um high pegel zu schalten muss der Pin als EINGANG konfiguriert werden (DDRC Register).
MfG,
SlyD
gut zu wissen wenn mir mal ein einziger i/0 fehlt
Mit hochohmigen Grüßen
Virus
Es lebe der Digitalkäse !
moooohment, wenn auf dem board ein pull UP ist, muss man den pin auf ausgang schalten und kann dann auf LOW ziehen ... denn high ist er ja schon!
oder meinst du jetzt statt das PORT register zu bedienen einfach das DDR register toggeln?
also DDRC &= ~(1<<SCL); um den pin (im PORT register steht ne 0) auf high-z zu schalten und das signal vom pullup auf high bringen zu lassen
und DDRC |= (1<<SCL); um den pin auf ausgang und gleichzeitig GND zu bringen (imt PORT steht ja noch 0)und damit das signal auf GND zu ziehen ?!
so müste es gehen ... kenne mich mit dem RP6 schaltplan ja leider nicht aus ^^
Das ist nichts RP6 spezifisches - so funktioniert nunmal den I2C Bus.
Es wird nicht aktiv auf high getrieben - das erledigt nur der Pullup der Pin ist dann hochohmig.
Das muss so sein damit mehrere Geräte (vor allem bei Multimaster) am Bus arbeiten können ohne Kurzschlüsse zu verursachen.
ja ok klingt logisch ich wollts nur nochmal in code festgehalten und bestätigt haben
damit dann keiner den code ganz oben benutzt und sich damit sein I2C zerschiesst ^^
Danke für euere schnellen Antworten.
Wenn ich Ceos nun richtig verstanden habe dann müsste man den SCL so ansteuern können:
14 Pins --> SCL am 10. Pin
DDRC |= (1<<PC9); //SCL als Ausgang definieren
PORTC |= (1<<PC9); //SCL high
PORTC &=~ (1<<PC9); //SCL low
Stimmt die Zahl nach PC oder ist damit etwas anderes gemein ... werde aus dem PCn nicht ganz schlau!
Lesezeichen