Forum: Mikrocontroller und Digitale Elektronik ATTiny12 mit 3xPWM und Slave I2C machbar?


von klk (Gast)


Lesenswert?

Ich hätte da mal ne Fräge! Und zwar habe ich vor mir eine Art RGB Fading
Modul zu machen, wie der Name Modul schon andeutet soll das ganze
modular sein! Am liebsten wäre mir zur ansteuerung der i2c Bus und um
die 3 Kanäle zu regel ist wohl pwm am besten geeignet! Da der ATTiny12
relativ billig ist (und ich einen zum ausprobieren rumfahren habe*G*)
Daher meine Frage:
Ist es möglich auf nem ATTiny12 (auf internem Quarz) 3 Software PWM
laufen zu lassen und gleichzeitig das Teil per Software zum i2c slave
device zu machen?
Ich habe noch nicht allzuviel mit MCs gemacht (das übliche, ATMega8 mit
LCD,i2c,UART,PWM und 'n bissle rumgespielt*G*) und kann das daher nicht
einschätzen.
Hoffe ihr könnt mir da weiterhelfen!
MFG
klk

von Clemens (Gast)


Angehängte Dateien:

Lesenswert?

Hallo klk,

ich habe mal versucht einen I²C Slave per Software zu implementieren,
der nebenbei die Zeit halten soll und ein DCF-77 Signal empfangen soll.
Also eine Art Funkuhrmodul. Das I²C-Interface hat dabei maximale
Priorität, was in etwa 20 sekunden Zeitverlust bei der Zeitzählung
resultiert.

Meine Erfahrung mit I²C Slaves ist folgende: exterm schwierig, sobald
du etwas höhere Geschwindigkeiten realisieren willst (also 100kHz sind
schon anspruchsvoll) und nebenbei noch Zeitkritische Operationen
verlangst. Vielleicht ist an deiner Stelle ein Regler mit entweder
HardwarePWM oder HardwareI²C sinnvoller. (z.B. ATTiny26 der hat
beides)

Ich habe dir mal meinen SW-I²C angehangen. Vielleicht hilfts ja was
;-)
Du musst folgende Macros verändern:

.macro i2c_putByte  ; store a recieved byte, could be a call
.endm
.macro i2c_getByte  ; get a byte for transmittion, could be a call
.endm
.macro i2c_addressed  ; this device has been addressed, could be a
      ; call
      ; and take more than only a few clock cycles
.endm


schöne Grüße, Clemens

von crazy horse (Gast)


Lesenswert?

wird in allen Belangen recht eng werden (kein RAM, nur die Register, ROM
ist auch nicht gerade berauschend, nur 1MHz Takt möglich).
Könnte klappen bei geschickter Programmierung, ist aber sicher auf
Kante gestrickt.
Mein Rat: nimm was grösseres.

von klk (Gast)


Lesenswert?

@crazy horse: Jepp, da stimme ich dir zu! Müsste das ganze ja dann auch
in asm schreiben (sonst schreib ich nur c)! Aber wenn ichs mit nem
ATTiny hinbekommen kann wäre das das geschickteste (soll möglichst
klein werden)

Kennt irgendwer eine Asm implemtierung von einem i2c Slave device für
den AVR? Oder eher gesagt:
Was für resourcen brauche ich für den i2c bus (timer,register etc.)?

Also für mein Software PWM brauche ich nen laufenden 8bit Timer (die
interrupts kann von mir aus der bus benutzten, die brauch ich für mein
pwm nich...)! Von den resourcen her sollte das fürs pwm allein dicke
langen....werde das ganze demnächst mal in asm schreiben und in dein
ATtiny einspielen...mal gucken...(teste meine Software in C mit nem
ATMega8)

Thx für die Antworten!
MFG
klk

von Clemens (Gast)


Lesenswert?

Guggst du meinen Anhang??

viel Erfolg! Clemens

von Peter D. (peda)


Lesenswert?

Nimm wenigstens den ATTiny13, der läuft mit 8MHz intern.

Trotzdem funktioniert Software I2C, wenn überhaupt, nur gaaanz gaaanz
langsam (max 10kBit).


Peter

von crazy horse (Gast)


Lesenswert?

vielleicht solltest du lieber eine Art SPI als Interface nehmen? Takt an
den Int-Eingang, einen beliebigen Portpin als Dateneingang. Brauchst ja
nur einen Datenframe, der irgendwie slave-Adresse, Kanaladresse und
Datenwert überträgt. Alle empfangen, wenn die Adresse mit der eigenen
übereinstimmt, werden die Daten übernommen. Ok - hast keinen Rückkanal,
aber brauchst du ja auch nicht unbedingt. Wird deutlich schneller und
benötigt weniger Programmspeicher/Rechenzeit als ein I2C-Interface.

von klk (Gast)


Lesenswert?

@Clemens: Sry...war ein bisschen in Eile beim lesen...ich hab deinen
Beitrag (wirklich ernst gemeint) irgenwie überlesen! Auf jedenfall mal
vielen Dank dafür, werde mir den code mal angucken (wird mir auf
jedenfall helfen, obs nun geht oder nicht*G*Eigentlich isses ja nur zum
lernen!)!

Hm...also attiny13 wär ne möglichkeit (der scheint ja relativ billig
und ist auch noch klein), bringt das wirklich was dafür (ich glaub ich
guck mal was mein attiny12 dazu sagt*rofl*)? Aber ist echt ärgerlich,
laut Datenblatt hat das Ding 2 pwm channels*grml*Einen mehr und ich
müsste mich nur noch ums i2c bemühen!
Is aber wohl nicht! Also wenn einer ne Hardwarelösung kennt mit der man
3pwm channels über nen i2c bus ansteuern kann wäre toll (und noch besser
wäre wenn man das als Normalsterblicher auch irgendwo in Deutschland
bestellen kann, ich hätte schon was passendes gefunden:
http://www.semiconductors.philips.com/pip/PCA9531PW.html aber das
kriegt man ja niergendwo)*G*
Zu den anderen Interfaces, i2c wäre halt praktisch weil man da alles
dranhängen kann und ich nur 2 Kabel rumlegen muss! Das SPI als
Interface...ist das überhaupt ein bus (bin nooblike)? Wie auch immer,
das wär dann ja wohl quasi improvisiert also siehts mit erweiterungen
eher schlecht aus.
Zur Bus geschwindigkeit, also die Geschwindigkeit jukt relativ wenig!
Ich muss nur ab und zu mal 32bit (8x8bit für jeden PWM Channel) zu den
einzelnen Modulen schieben bzw. auslesen! Ich bräuchte eigentlich nur
eine Funktion Schreiben mit 32bit und eine mit 32bit auslesen!

Danke für alle Antworten
MFG
klk

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.