Hallo NG, ich hätte da mal eine Frage. Wenn ich das richtig verstanden habe, setzte, beziehungsweise "lösche" ich die Ausgänge am AT91SAM7S mit 2 verschiedenen Registern (so hab ichs jetzt zumindest mal für meinen 8Bit R2R DAC gemacht): void sound_out(char value) { p_pPio->PIO_CODR = BIT9+BIT10+BIT11+BIT12+BIT13+BIT14+BIT15+BIT16; p_pPio->PIO_SODR = (unsigned long)value << 9; } Was ich jetzt nicht ganz verstehe, dann müsste doch auf den Pins immer ein "Zucken" entstehen, da ich ja nicht 100% gleichzeitig löschen und setzen kann, oder? Wie macht man denn sowas. Muss ich da vor dem Setzen noch etwas deaktivieren und danach wieder aktivieren? Was jetzt hier auch noch ganz gut dazu passt (ist mir einfach sooooo wichtig): Was passiert denn, wenn ich TTL Signale an die Pins 1:1 anklemme (also ohne Pegelwandelt etc. dazwischen)? Danke für jede Hilfe und jeden Tip. MfG Peter
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial http://www.mikrocontroller.net/articles/Bitmanipulation Grundlagenarbeit. Peter Pippinger schrieb: > Was ich jetzt nicht ganz verstehe, dann müsste doch auf den Pins immer > ein "Zucken" entstehen, da ich ja nicht 100% gleichzeitig löschen und > setzen kann, oder? Glaub ich eher weniger ... zuerst wird das Register gesetzt und dann durchgeschaltet. Darum dauert ein Zyklus (eine asm Anweisung) auch immer 4 Takte. Peter Pippinger schrieb: > Wie macht man denn sowas. Muss ich da vor dem Setzen noch etwas > deaktivieren und danach wieder aktivieren? -> Tutorial Peter Pippinger schrieb: > Was jetzt hier auch noch ganz gut dazu passt (ist mir einfach sooooo > wichtig): Was passiert denn, wenn ich TTL Signale an die Pins 1:1 > anklemme (also ohne Pegelwandelt etc. dazwischen)? ja was meinst du denn das passiert? Der AVR hustet? Nö warum solltest du es nicht anklemmen dürfen? Soweit sich die Spannungen in denen im Datenblatt angegebenen Bereichen befinden (in Abhängigkeit von Vcc) ist alles in bester Ordnung. Stichworte sind Pullupwiderstand und Pulldownwiderstand bzw. wenn nötig: http://www.mikrocontroller.net/articles/Pegelwandler und nu lies das Tutorial das steht da nämlich alles drin. Nicht faul sein !
Peter Pippinger schrieb: > void sound_out(char value) > { > p_pPio->PIO_CODR = BIT9+BIT10+BIT11+BIT12+BIT13+BIT14+BIT15+BIT16; > p_pPio->PIO_SODR = (unsigned long)value << 9; > } > > Was ich jetzt nicht ganz verstehe, dann müsste doch auf den Pins immer > ein "Zucken" entstehen, da ich ja nicht 100% gleichzeitig löschen und > setzen kann, oder? Ja, die CODR und SODR sind perfekt für das meiste, weil man da kein read-modify-write durchführen muss und deshalb auch nicht gegen Interrupts schützen muss. Um Pins in einem Schritt sowohl zu setzen als auch zu löschen, musst du die gewünschten Pins per OWER freischalten und kannst dann deren Status direkt im ODSR setzen. Siehe Datenblatt unter PIO / Synchronous Data Output (Kapitel 27.4.5).
Hallo Michael, zunächst mal Danke für Deine Antwort. >http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial >http://www.mikrocontroller.net/articles/Bitmanipulation >Grundlagenarbeit. Naja, die Bitmanipulation habe ich ja soweit hinbekommen. Es ging ja mehr darum, ob ich denn auch gleichzeitig verschiedene Pins auf High UND Low setzen kann... >Peter Pippinger schrieb: >> Was ich jetzt nicht ganz verstehe, dann müsste doch auf den Pins immer >> ein "Zucken" entstehen, da ich ja nicht 100% gleichzeitig löschen und >> setzen kann, oder? >Glaub ich eher weniger ... zuerst wird das Register gesetzt und dann >durchgeschaltet. Darum dauert ein Zyklus (eine asm Anweisung) auch immer >4 Takte. Glaub ich schon, da ja jeweils einer der beiden "Befehle" direkte Auswirkungen auf die Pins hat, oder? Andreas hat was dazu geschrieben, was mir so einleuchten würde. >Peter Pippinger schrieb: >> Wie macht man denn sowas. Muss ich da vor dem Setzen noch etwas >> deaktivieren und danach wieder aktivieren? >-> Tutorial AVR != AT91SAM7S >> Was jetzt hier auch noch ganz gut dazu passt (ist mir einfach sooooo >> wichtig): Was passiert denn, wenn ich TTL Signale an die Pins 1:1 >> anklemme (also ohne Pegelwandelt etc. dazwischen)? >ja was meinst du denn das passiert? Der AVR hustet? Nö warum solltest du >es nicht anklemmen dürfen? Soweit sich die Spannungen in denen im >Datenblatt angegebenen Bereichen befinden (in Abhängigkeit von Vcc) ist >alles in bester Ordnung. Naja, die Antwort war sicherlich lieb gemeint, aber mit "Wenn Du alles richtig machst, dann funktioniert auch alles" kann ich leider nicht viel anfangen. Ich habe halt nur die Angst, dass ich was kaputt mache (das ging früher immer recht flott, wenn ich den Lotkolben in die Hand nahm ;-) >Stichworte sind Pullupwiderstand und Pulldownwiderstand bzw. wenn nötig: >http://www.mikrocontroller.net/articles/Pegelwandler Das hab ich schon mal überflogen, aber beim AT91SAM7 steht auf der Webseite, dass der TTL-tollerant wäre. Deswegen weiß ich nicht, ob ich die einfach ranhängen kann und ob dann was passieren würde... >und nu lies das Tutorial das steht da nämlich alles drin. Nicht faul >sein ! Ich bin nicht faul. Ich würde das nur sooooo gerne machen und hab leider zu wenig Zeit. Ich dachte halt, dass ich im Forum schneller Fragen zu bestimmten Dingen beantwortet bekomme. Also bitte nicht böse sein, aber das ein oder andere Mal werden bestimmt von meiner Seite noch Fragen kommen, wo sich ein Profi ?$%! denkt... Viele Grüße, Peter
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.