Forum: Mikrocontroller und Digitale Elektronik Attiny45 INT0 benötigt, aber auch I2C bzw. Two Wire Bus


von epikao (Gast)


Lesenswert?

Hallo,
ich benötige unbedingt den Interrupt Eingang INT0 da dieser auf negative 
und positive Flanke reagiert.

Jetzt will ich aber gleichzeitig den Two Wire Bus verwenden, der SCK und 
SDA Pins benötigt.  Der SCK liegt aber am gleichen Pin wie der INT0.

Wie löse ich Dies am elegantesten (ist es richtig, dass der Clock für 
den Two Wire Bus per Software erzeugt werden muss)?

Am liebsten hätte ich ein 8-Pin uP von Atmel... es muss nicht der 
Attiny45 sein.

von m.n. (Gast)


Lesenswert?

epikao schrieb:
> ich benötige unbedingt den Interrupt Eingang INT0 da dieser auf negative
> und positive Flanke reagiert.

Jeder Eingang kann per PCINT positive und negative Flanken erkennen.

von Thomas E. (thomase)


Lesenswert?

epikao schrieb:
> ich benötige unbedingt den Interrupt Eingang INT0 da dieser auf negative
> und positive Flanke reagiert.

Das tut der Pinchange-Int auch.

> Jetzt will ich aber gleichzeitig den Two Wire Bus verwenden, der SCK und
> SDA Pins benötigt.  Der SCK liegt aber am gleichen Pin wie der INT0.

Nimm also irgendeinen anderen Pin.

mfg.

von epikao (Gast)


Lesenswert?

ich habe mich falsch ausgedrückt,

ich will nur auf eine Flanke reagieren, nicht beide!
Da geht nur der INT0 oder?

von Walter (Gast)


Lesenswert?

epikao schrieb:
> Da geht nur der INT0 oder?

ja, das schon, aber kannst Du nicht beim Pinchange Interrupt die eine 
Flanke ignorieren

von epikao (Gast)


Lesenswert?

Walter schrieb:
> epikao schrieb:
> Da geht nur der INT0 oder?
>
> ja, das schon, aber kannst Du nicht beim Pinchange Interrupt die eine
> Flanke ignorieren

ich muss wissen ob es eine negative oder positive Flanke ist...das kann 
ich mit Pinchange nicht erkennen oder?

von wüst (Gast)


Lesenswert?

epikao schrieb:
> ich muss wissen ob es eine negative oder positive Flanke ist...das kann
> ich mit Pinchange nicht erkennen oder?

In der Pinchange-ISR abfragen, ob der Pin high oder low ist. Dann weiß 
man, mit welcher Flanke der Interrupt ausgelöst wurde und kann 
entsprechend agieren.

von epikao (Gast)


Lesenswert?

naja mit dem INT0 kann ich gezielt nur auf eine Flanke agieren, beim 
Change muss ich bei beiden Flanken was machen.
Wenn ich jetzt noch den Clock für den Two Wire Bus softwaretechnisch 
lösen muss,
habe ich ein Zeit Problem...oder ist der Clock doch hardwareseitig?

von Peter D. (peda)


Lesenswert?

AIN1 kann auch Interrupts auslösen.
Das USI kann mit T0 getaktet werden.

von Thomas E. (thomase)


Lesenswert?

epikao schrieb:
> habe ich ein Zeit Problem

Ist das ein Impuls? Wenn ja, wie oft kommt der und wie lang ist er? Oder 
handelt es sich um kontinuierlichen Wechsel?

mfg.

von epikao (Gast)


Lesenswert?

es ist ein periodischer Impuls, wobei ich die Zeit zwischen jeder 
positiven Flanke messen will...
so um die 100kHz...

Peter Dannegger schrieb:
> AIN1 kann auch Interrupts auslösen.
> Das USI kann mit T0 getaktet werden.

hmm also ist es richtig, dass ich mich für den Two Wire Clock selber 
kümmern muss, indem ich z.B ein Timer einsetze....

von Peter D. (peda)


Lesenswert?

epikao schrieb:
> es ist ein periodischer Impuls, wobei ich die Zeit zwischen jeder
> positiven Flanke messen will...

Mußt Du wirklich messen oder reicht der Vergleich mit einem Schwellwert 
aus?

von epikao (Gast)


Lesenswert?

ich muss messen, je kürzer die Zeit zwischen den Flanken, desto höher 
muss die Ausgangsspannung sein, d.h. ich gebe die Ausgangsspannung mit 
einem DA-Wandler aus, der eben den I2C Bus benötigt...

von Peter D. (peda)


Lesenswert?

epikao schrieb:
> Wenn ich jetzt noch den Clock für den Two Wire Bus softwaretechnisch
> lösen muss,
> habe ich ein Zeit Problem

Warum das denn?

I2C macht man natürlich in der Mainloop, dann ist es dem Meßinterrupt 
vollkommen schnurz, wie lange es dauert.
Kann Dein DAC überhaupt mehr als 100kBit?

von epikao (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Kann Dein DAC überhaupt mehr als 100kBit?

MCP4725 ... denke schon

Peter Dannegger schrieb:

> I2C macht man natürlich in der Mainloop, dann ist es dem Meßinterrupt
d.h. ich kann den SCL theoretisch auch an einem anderen PIN herausgeben? 
(ich muss nur schicken, nicht lesen)

ich hab gedacht, dass der I2C komplett hardwaretechnisch integriert ist. 
Also wenn ich ein Wert übergebe, wird dieser automatisch mit CLK und 
Daten richtig ausgegeben...

von epikao (Gast)


Angehängte Dateien:

Lesenswert?

die Aussage siehe Bild auf Seite 112 vom Attiny Datenblatt verwirrt 
mich!

von Peter D. (peda)


Lesenswert?

epikao schrieb:
> Also wenn ich ein Wert übergebe, wird dieser automatisch mit CLK und
> Daten richtig ausgegeben...

Weit gefehlt.

Das I2C ist sehr flexibel, daher muß man die verschiedenen Aktionen 
(Start, Stop, ACK, Data) in der gewünschten Reihenfolge selber aufrufen.
Als Master kann man alle Aktionen mit 2 IO-Pins in Software machen.
Im Datenblatt des MCP4725 steht das I2C ganz ausführlich drin und was 
man alles implementieren muß.

Das USI enthält nur rudimentäre Slavefunktionen: Start-/Stop-Erkennung, 
Clock-Stretching, 8Bit Schieberegister.

von epikao (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Das I2C ist sehr flexibel, daher muß man die verschiedenen Aktionen
> (Start, Stop, ACK, Data) in der gewünschten Reihenfolge selber aufrufen.
> Als Master kann man alle Aktionen mit 2 IO-Pins in Software machen.

nützt dieses USI überhaupt was?! Da schreibe ich lieber alles per 
Software und kann die eigene PINs selber wählen. Zudem bin ich dann 
sicher das es funktioniert...

inwiefern entlastet das integrierte USI den uP überhaupt?

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.