mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mehrere I/O Pins am AT91SAM7S setzen


Autor: Peter Pippinger (uncle-sam7)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 !

Autor: Andreas B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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).

Autor: Peter Pippinger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.