Hallo, ich suche eine möglichst einfache Hardwarelösung um einen Port Pin eines AVRs zu togglen. Ich habe schon viele schaltungen in diese richtung gesehen, aber die schalten alle eine meist etwas größere Last. eine der lösungen war mit einem T-FlipFlop. Wie muss ich die schaltung aufbauen um damit den port zu steuern? andere möglichkeiten gehen natürlich auch (nur Software in diesem Fall nicht) Gruß
Willst du den Eingang toggeln? Dann mit einem FlipFlop. Den Ausgang kannst du nur über die Software toggeln.
Also die einfachste Möglichkeit ist ganz klar ein JK-FF zu nehmen, den J und K Eingang auf Vcc schliessen, und den Taster entprell an den Clock anschliessen. Entprellen würde ich am besten mit einem RC-Glied nach dem Taster, mit einer Zeitkonstante von etwa 5ms. Im Anhang habe ich dir kurz eine solche Schaltung gezeichnet. Die Werte kannst du so übernehmen. MFG
Ephraim Hahn schrieb: > ich suche eine möglichst einfache Hardwarelösung um einen Port Pin eines > AVRs zu togglen. Dir ist wohl eine Softwarelösung viel zu effektiv? Entprellen und Togglen sind doch die Lieblingsaufgaben eines jeden MCs. Kostet allerdings etwa 0,1% an CPU-Performance. Oder ist Deine CPU schon zu 99,9% ausgelastet? Dann nimm nen ATTiny13, der das macht. Ein Logik-FF kann das nicht wuppen, da er nicht entprellt. Peter
Es liegt nicht an der CPU last die zu viel wäre. In meinem hauptprogramm wird eine Schleife durchlaufen, dieextrem zeitkritisch ist, und dazu muss ich dann wenn ich es brauche die zustände am PORT abgreifen können, und kann mir keine unterbrechung der schleife durch interrupts erlauben. @sumada: Vielen Dank! Ich werde es mir heut nachmittag ansehn wenn ich wieder zu hause bin. Kann ich parallel zum PORT Pin da ohne weiteres noch eine LED zur statuskontrolle dranhängen? verträgt der FF das von der Last her? Gruß
Tschau Eine LED sollte kein Problem sein. Ein uC Eingang zieht kaum Strom. Und wenn du nicht gerade eine ultrahelle LED nimmst klappt das. Wenn du es als Status benötigst reicht eine Stromsparende allemals. Und bei 2-5mA stirbt dir kein Logik IC. Wenn du aber trotzdem bedenken hast, kannst du ein JK-FF mit Open Collector nehmen, und mit einem Pullup arbeiten. Aber eben wie gesagt, ist kein Problem.
Das nicht per Software zu machen, halte ich auch in fast allen Anwendungsfällen für eine falsche Herangehensweise.
Ephraim Hahn schrieb: > Es liegt nicht an der CPU last die zu viel wäre. > In meinem hauptprogramm wird eine Schleife durchlaufen, die extrem > zeitkritisch ist, Was machst du?
Warum das? Wenn ein uC nun mal nicht dafür eingesetzt werden soll, kann man ruhig mal zu Hardwarelösungen greifen. Sind zwar ein wenig teurer, 5€ vielleicht, mann muss aber nicht irgendwo Platz machen in der Software. Und Interruptlösungen sind sowieso scheisse, da mann eine SPI kommunikation gefährden könnte zum Beispiel. Lieber wieder so wie früher machen. Mit Röhren war alles besser :D
da bin ich auch mal neugierig Ephraim Hahn schrieb: > Es liegt nicht an der CPU last die zu viel wäre. > In meinem hauptprogramm wird eine Schleife durchlaufen, die extrem > zeitkritisch ist, kannst du die hauptschleife mal zeigen
die Sache befundet sich noch in der planung. Um mir den Roman was ich mache zu ersparen, hier hab ich es beschrieben: Beitrag "Bauprojekt: kleines Lichtmischpult"
Bei allem Respekt. Aber wenn du bei der Anwendung in Timingprobleme kommst, dann machst du etwas grundsätzlich falsch.
Was du noch nicht geschrieben hast ist, möchtest du einen Eingang oder einen Ausgang togglen. Wenn es ein Eingang ist, wie fragst du ohne Software ab. Wenn es ein Ausgang ist, würde mich Interessieren wie du ohne Software togglest.
Und wenn ich mir deine Antworten so durchlese, keimt in mir das Gefühl auf, dass du noch keine Ahnung davon hast, welche Power dir so ein µC gibt. > Das Problem ist aber, dass ich wärend der Motor um den Fader > zu stellen betätigt wird ständig eine Kontrollmessung benötige. > Sonst weis ich ja nicht wann ich den Motor stoppen muss. Wenn du alle 1 Millisekunde die Positionen aller Fader feststellst, dann reicht das Dicke! Oder bewegen sich deine Fader in 1 Sekunde über einen Meter weit? 1 Millisekunde ist aber für einen mit 16Mhz getakteten AVR eine halbe Ewigkeit. In der Zeit arbeitet der immerhin, über den Daumen gerechnet, rund 15-TAUSEND Befehle ab.
> und kann mir keine unterbrechung der schleife durch interrupts erlauben.
Für eine Tasterabfrage brauchst du bei aktivem uC keinen Interrupt. Ob
du auf einen Taster nach 50us oder erst 50ms reagierst, merkt keiner,
der den Taster betätigt. Und 50ms sind eine halbe Ewigkeit für einen
uC... :-/
EDIT:
Ich schwöre, das mit der halben Ewigkeit habe ich nicht von Karl Heinz
abgeschrieben. Zudem wären es dann ja 25 Ewigkeiten, weil ja schon 1 ms
eine halbe Ewigkeit ist ;-)
okay, scheinbar unterschätze ich hier 16Mhz um einiges ;-) trotzdem bietet mir die Hardwarelösung mit dem togglen eines eingangs (alles andere wäre ja schwachsinn...) noch einen vorteil: Ich kann paralell die status LEDs togglen, ohne dafür ausgangs Ports verschwenden zu müssen. Immerhin sind das mehr als 26 LEDs, die ich brauche die selbst in einer Matrix einige Pins benötigen. Und da das ganze ein Einzelstück wird interessieren auch keinen die bisschen mehrkosten.
Ephraim Hahn schrieb: > okay, scheinbar unterschätze ich hier 16Mhz um einiges ;-) > > trotzdem bietet mir die Hardwarelösung mit dem togglen eines *eingangs* > (alles andere wäre ja schwachsinn...) noch einen vorteil: Ich kann > paralell die status LEDs togglen, ohne dafür ausgangs Ports verschwenden > zu müssen. Ähm. Und wie symbolisierst du dann einen gedrückten Taster, wenn deine gespeicherte Sequenz dir das vorschreibt? > Immerhin sind das mehr als 26 LEDs, die ich brauche die selbst in einer > Matrix einige Pins benötigen. Schieberegister an den AVR dran und du kannst >3000 Leds anschliessen, ohne in Probleme zu kommen, weil du am AVR nur 3 Pins dazu brauchst. > Und da das ganze ein Einzelstück wird > interessieren auch keinen die bisschen mehrkosten. Ist schon klar. Darum gehts aber auch nicht. Software ist flexibel. Alles was du jetzt in Hardware machst, wird über die Lebensdauer deines Gerätes gesehen, für immer so bleiben. Alles was du in Software machst, kannst du immer noch ändern, wenn dir das Verhalten nicht gefällt. Du kommst vielleicht in einem halben Jahr drauf, dass es toll wäre, wenn dein Lauflicht auch noch ganz schnell laufen soll. Hast du den Taktgenerator dafür in Hardware aufgebaut, musst du mit dem Lötkolben ran. Ist der Taktgenerator aber in Software, hängst du dich in die Entwicklungsumgebung, fügst zur Timingtabelle des Taktgenerators eine Zeile dazu; überlegst dir, wie der Benutzer die auswählst (wenn du die Software von vorneherein geschickt aufgebaut hast, geht der Schritt zb schon mal automatisch); brennst das ganze in den AVR und bist fertig. Ist das Programm einigermassen geschickt aufgebaut, dann ist diese Änderung schneller fertig, als dein Lötkolben braucht um warm zu werden. Die Kunst liegt daran, den Mittelweg zu finden zwischen * was mach ich in Software * was mach ich in Hardware Sofern nicht massive Timingprobleme dagegen sprechen, versucht man immer möglichst viel in die Softwareschicht zu verlagern. Warum? Weil Software felxibel ist und der erste Entwurf nie vollständig ist bzw. fehlerhaft ist.
Ephraim Hahn schrieb: > Immerhin sind das mehr als 26 LEDs Dann nimm eben 3 Stück ATtiny2313, die je 9 Tasten entprellen und togglen. Ne andere Möglichkeit: Tastenabfrage per 74HC165, LEDs per 74HC595. Oder pro Fader+Motor+Taste+LED nen ATtiny24 und alle 26 ATTiny24 parallel am I2C-Bus. Oder hast Du schon ne Hardwarelösung gefunden, die auch entprellt? Peter
> Ähm. Und wie symbolisierst du dann einen gedrückten Taster, wenn deine > gespeicherte Sequenz dir das vorschreibt? Das laden hätte ich einem eigenen controller überlassen, der quasi parallel zum taster angeschlossen ist. das entprellen hätte ich mittels RC glied geregelt. eine weitere möglichkeit die ich mir ausgedacht habe wäre jedem Kanalzug einen eigenen kleinen controller zu spendieren. Dieser kümmert sich dann um die auswertung des faders mittels ADC, um die taster für den kanal und um die motorsteuerung. Ist der I2C denn schnell genug um von 8 controllern nacheinander den 10bit ADC wert und die tasterzustände (4 taster pro kanal) mit einer für den benutzer unbemerkbarer Latenz an den hauptcontroller zu schicken? haben die ATTinys überhaupt einen ADC? und noch eine ganz andere Frage: ich muss am schluss ja das 0-10V signal ausgeben. das hätte ich per pwm und OPA gelöst: Beitrag "0-10V mit PWM am AVR" aber kann denn ein großer avr wie z.B. der 1280 überhaupt 6 10bit pwm signale gleichzeitig ausgeben?
Peter Dannegger schrieb: > Ephraim Hahn schrieb: > > Oder hast Du schon ne Hardwarelösung gefunden, die auch entprellt? Hardwarelösung die entprellt? ist nicht dein ernst oder? RC-Glied an Schmittrigger, Tau so einstellen dass bei 5ms Einschaltschwelle erreicht ist. OK 5ms ist untere grenze wenn mach nach Lernbuch geht. kannst auch 10ms nehmen
Ephraim Hahn schrieb: >> Ähm. Und wie symbolisierst du dann einen gedrückten Taster, wenn deine >> gespeicherte Sequenz dir das vorschreibt? > Das laden hätte ich einem eigenen controller überlassen, der quasi > parallel zum taster angeschlossen ist. Das meinte ich nicht. Wie schaltest du dann die LED per µC ein oder aus, wenn das hardwaremässig gar nicht vorgesehen ist, weil der Taster selber die LED mit ein bzw. ausschaltet. > eine weitere möglichkeit die ich mir ausgedacht habe wäre jedem Kanalzug > einen eigenen kleinen controller zu spendieren. Dieser kümmert sich dann > um die auswertung des faders mittels ADC, um die taster für den kanal > und um die motorsteuerung. Blos nicht. Das war ein Scherz von PeDa. Du bist mit einem Prozessor schon überfordert. Wenn du nicht 16 ADC Kanäle brauchen würdest, würde ich dir sogar das jetzige 2 Prozessoren Konzept ausreden. Aber 2 Prozessoren mittels TTL-UART miteinander zu verbinden: Da reden wir dich schon durch. Das kriegen wir hin. Aber viele Prozessoren: Du hast keine Ahnung worauf du dich da einlässt. > den benutzer unbemerkbarer Latenz an den hauptcontroller zu schicken? Ich sag mal so: Wenn dein Prozessor zwischendruch noch zur eigenen Belustigung 200 teuflisch schwierige quadratische Gleichungen löst, wird dein Benutzer das immer noch nicht mitkriegen. > haben die ATTinys überhaupt einen ADC? Datenblätter. Die gibts auch in einer Kurzform, bzw. bei Atmel gibt es eine Tabelle mit den Eigenschaften aller im Verkauf befindlichen Produkte. > aber kann denn ein großer avr wie z.B. der 1280 überhaupt 6 10bit pwm > signale gleichzeitig ausgeben? Sicher. Wenn man die PWM zb in Software macht, keine übertriebenen Anforderungen an die PWM Frequenz hat und das ganze hinten nach ordentlich filtert. Aber an der Stelle könnte man dann tatsächlich über eigene PWM Module nachdenken. Ob man Platinenplatz in ein aufwändiges Filter investiert oder in ein PWM Modul, welches dank höher PWM Frequenz die Anforderungen an das Filter senkt, ist Jacke wie Hose. Aber: man darf auch nicht übertreiben. Irgendwann ist auch der beste Prozessor überlastet, wenn man ihm zuviel zumutet. Eine PWM wird in deinem Projekt immer eine PWM bleiben und da wird sich auch nichts ändern. Ob man die in Software macht oder in Hardware ist so gesehn vom Aufwand her wahrscheinlich egal. Verschiebt man aber die PWM aus der Software in die Hardware kriegt man wieder Rechenzeit frei ohne das man im Gesamtkonzept Flexibilität aufgeben muss.
Um einen Taster abzufragen braucht man normalerweise keine Interrupt-Steuerung. Normalerweise ... kommt natürlich drauf an, wo es in der Hauptschleife noch so zu Verzögerungen kommen kann bzw. wie lange die Durchlaufzeit der Schleife dauert. Gruß Dieter
Karl heinz Buchegger schrieb: > Blos nicht. > Das war ein Scherz von PeDa. Nö, war es nicht. Wenn man viele gleichartige Baugruppen hat, bietet sich eine Modularisierung geradezu an. Jedes Modul kriegt nen Dipswitch zum Einstellen der Adresse, fertig. Mit 2 Modulen testet und programmiert man und dann kann man beliebig erweitern oder auch defekte Module blitzschnell austauschen. Und der Kabelwust reduziert sich auch erheblich. Professionelle Anlagen dürften auch so aufgebaut sein. Peter
Peter Dannegger schrieb:
> Professionelle Anlagen dürften auch so aufgebaut sein.
Du willst jetzt aber nicht wirklich einem Anfänger ein
Mehrprozessorkonzept unterjubeln?
Nafets Sumada schrieb: > Hardwarelösung die entprellt? ist nicht dein ernst oder? RC-Glied an > Schmittrigger Dann sind wir also schon bei 52 Widerständen, 26 Kondesatoren, 26 Schmitt-Trigger, 26 T-FF. Mit 74HC14, 74HC112 sind wir dann bei insgesamt 96 völlig überflüssigen Bauteilen, die geroutet und gelötet sein wollen. Peter
Karl heinz Buchegger schrieb: > Du willst jetzt aber nicht wirklich einem Anfänger ein > Mehrprozessorkonzept unterjubeln? Das könnte etwas sportlich werden. Man kann ja erstmal mit 2 Fadern anfangen. Peter
Gurgel mal nach LSD 8. Da werkelt nur ein ATMEGA 64 drin und etwas Peripherie. Mach es nicht komplizierter als es sein muss. MW
Peter Dannegger schrieb: > Karl heinz Buchegger schrieb: >> Du willst jetzt aber nicht wirklich einem Anfänger ein >> Mehrprozessorkonzept unterjubeln? > > Das könnte etwas sportlich werden. :-) Uff. Aufatmen Du hast natürlich recht. Profimässig würde man so ein Kanalmodul mit Tiny, Motorfader, Tastern und LED machen. Das ganze an einem Bus und fertig ist die Sosse. Mein Akkulader hat auch so einen Aufbau für die Ladeinseln mit zentraler Anzeige. Aber ich denke für ihn wäre Schieberegister für Taster, LED und Motor sowie ein 8-pol Flachbandkabel für die Potis momentan die vernünftigste Lösung. Ergibt immer noch schöne 'Module'. Wenn man mal Aufwand zu Lernkurve berücksichtigt.
Nun gut. Ich habe so das gefühl ich würde mich alleine gnadenlos in heillosem Chaos verrennen ;-) Ganz ehrlich wäre ich sehr für diese mehrprozessor Lösung, da ich in weiterer Zukunft ein Projekt ins auge fasse für das ich ganz ähnliche Fadersteuerungen benötige, nur weitaus mehr (25).
ich glaube ihr hab das etwas falsch aufgefasst insgesamt sind hier 6 kanalzüge + 2 busse + masterzug von Nöten also insgesamt 9 Module, um das nochmal festzuhalten
>ich glaube ihr hab das etwas falsch aufgefasst insgesamt sind hier 6 >kanalzüge + 2 busse + masterzug von Nöten also insgesamt 9 Module, > um das nochmal festzuhalten Schön gerechnet... 9 ADC-Kanäle hat leider kein AVR... Versuch doch erst mal einen Motorfader anzutreiben.
Soo ich hab mal ein wenig gebastelt: Ich habe mir mal eine Schaltung für ein Kanalmodul mit einem Tiny261 gezeichnet. Wenn der vom speicher zu knapp wird kann ich ja problemblos einen 461 oder gar 861 nehmen. Noch eine frage zum I2C Bus: Atmel nennt den ja TWI. Ich bin mir nun nicht ganz sicher, ob der Tiny den hat. Die pins SDA und SCL sind zwar vorhanden aber im datenblatt steht nichts davon. Oder ist dieses USI das selbe in grün? und vertragen sich die beiden pullups am TWI mit dem ISP beim flashen? Auch die Motoransteuerung habe ich noch nicht mit eingezeichnet, da ich nicht wirklich weis wie ich das realisieren soll. reicht es den motor mit einer konstanten spannung einfach an und aus zuschalten oder muss ich den per pwm regeln? Wie soll ich die vorwärts/rückwärts umpolung mit dem tiny machen?
noch die motordaten: Rated voltage of motor 10V DC Maximum current of motor 800mA or less (at 10V DC)
Ephraim Hahn schrieb: > Ich habe mir mal eine Schaltung für ein Kanalmodul mit einem Tiny261 > gezeichnet. Sieht ganz o.k. aus. Die 10k an den Tasten braucht man nicht unbedingt, man kann die internen Pullups (50k) nehmen. Quarz brauchst Du für I2C auch nicht, Du kannst die internen 8 oder 16MHz nehmen. > Noch eine frage zum I2C Bus: Atmel nennt den ja TWI. Ja, als Slave ist das USI vollkommen ausreichend. Nur der Master sollte das große I2C haben (irgendein ATmega, z.B. ATmega328P). > Auch die Motoransteuerung habe ich noch nicht mit eingezeichnet, da ich > nicht wirklich weis wie ich das realisieren soll. Für nen DC-Motor brauchst Du ne Vollbrücke zum Umpolen. Peter
okay, hab die schaltung mal soweit angepasst. Für den Motor habe ich nun einen L293D genommen, habe gelesen dass der schonmal erfolgreich mit nem motorfader verwendet wurde. Muss ich mir für die vergleichsweise kurzen motor laufzeiten über die kühlung gedanken machen? ist der rest okay so?
hab ich mir der übersichthalber im schaltplan erstmal gespart, da ich das ding erstmal auf lochraster aufbaue. Da werde ich dann natürlich welche hinpappen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.