mikrocontroller.net

Forum: Compiler & IDEs Interner A/D Wandler Problem bei Atmega16


Autor: Ilea Uni (auftrag2007)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hardware:
Masterplatine: Atmega16, extern Clock 16MHz
Slaveplatine: Atmega16, extern Clock 16MHz

Software: AVR Studio4.0

Ich habe anhand zwei Platinen, jeweils mit ein Atmega16 und ein extern 
Clock ausgerüstet werden.(die beide µC sind asynchronisch).  Und jetzt 
müssen die beide Platinen  sich miteinander so kommunizieren.

Das 6 Bits PORTA0:5 von Masterplatine sollten als normale I/O 
eingestellt werden, und zwar auch mit PORTA0:5 von  Slaveplatine eins zu 
eins verbunden werden
Nur PORTA7 von Masterplatine wird als ein AD Wandler verwendet. Und die 
analogische Spannung an PORTA7 wird von Slaveplatine gesteuert.

1.Master versendet ein sog. 6 Bit "ID_Master" durch PORTA0:5 zu Slave.
2.Slave vergleicht sich LÜCKENLOS mit ihr eigene „ID_Slave“(vorher schon 
initialisiert)
 wenn beide "ID" GLEICH sind, dann ERHÖHT die Slaveplatine die 
Analogspannung, die mit PORTA7 von Master verbunden ist.
wenn NICHT, dann Spannung ERNIEDERIGT
3. Jezt müsste Masterplatine jedoch den Wert der Analogspannung 
abfragen, um den weitere Aufgaben zu abarbeiten.
Problem ist, sobald die Masterplatine den PORTA als AD Wandler 
umgeschaltet hat, ist der vorherige ID_Master von PORTA0:5 unverändert 
oder geändert.  Wenn ID_Master geändert würde, es kann das Ergebnis in 
der ganz andere Richtung aufnehmen, weil die Konvertierungsdauer des AD 
Wandler viel länger als die Reaktionszeit der Slaveplatine ist.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ilea Uni wrote:

> Problem ist, sobald die Masterplatine den PORTA als AD Wandler
> umgeschaltet hat, ist der vorherige ID_Master von PORTA0:5 unverändert
> oder geändert.


Warum schaltest Du denn den gesamten Port A um ?
Und wie ? Zeig mal Code.

Abgesehen davon ist sowas großer Quatsch, warum machst Du das ?

Was soll das bringen, Signale zwischen digitalen ICs analog zu 
übertragen.
Erhöht nur drastisch die Übertragungszeit (settlingtime des DAC + 
Wandlungszeit des ADC) und Fehleranfälligkeit.


Peter

Autor: Ilea Uni (auftrag2007)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter Dannegger wrote:
> Ilea Uni wrote:
>
>> Problem ist, sobald die Masterplatine den PORTA als AD Wandler
>> umgeschaltet hat, ist der vorherige ID_Master von PORTA0:5 unverändert
>> oder geändert.
>
>

>
> Abgesehen davon ist sowas großer Quatsch, warum machst Du das ?
>
> Was soll das bringen, Signale zwischen digitalen ICs analog zu
> übertragen.
> Erhöht nur drastisch die Übertragungszeit (settlingtime des DAC +
> Wandlungszeit des ADC) und Fehleranfälligkeit.

Hintergrund meiner Studienarbeit:
Es gibt eine Master und 63 Slaveplatinen, wobei der Master alle 
asynchronischen Slave durch sog. angepassene "ID" ansteuern muss.
Leider ist hier die Möglichkeit durch SPI Daten zu übertragen oder 
anderen Datenübertragungsverfahren ausgeschlossen.

> Warum schaltest Du denn den gesamten Port A um ?
> Und wie ? Zeig mal Code.

In Datenblätter der Atmega16
http://www.atmel.com/dyn/resources/prod_documents/...
auf Seite 218 steht:
• Bit 7 – ADEN: ADC Enable
Writing this bit to one enables the ADC. By writing it to zero, the ADC 
is turned off. Turning the
ADC off while a conversion is in progress, will terminate this 
conversion.

ein Pseudocode meines Programm für Masterplatine
send(ID_Master);
ADMUX |= (1<<MUX2)|(1<<MUX1)|(1<<MUX0); //PORTA7 auswählen, s. Tabelle 
84
ADCSRA |= (1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); // prescaler SCK/128
ADCSRA |= 1<<ADEN;  enable ADC
ADCSRA |= 1<<ADSC;  start ADC
ADCSRA |= 1<<ADIE;  enable ADC Interrupt
while(!Umwandlung_fertig){
//warten bis Umwanglung fertig
}
read(ADCW);
if (Spannung erhöht)
  blabla
else blabla

wobei im ADC Interrupt
ISR(ADC_vect){  //Falls ADC Interrupt aktiviert, eine AD Umwandlung 
fertig
  Umwandlung fertig
}

ich weiss nicht was passiert, wenn ich ein Logic One an ADEN Bit 
schreibe
ob nur PORTA7 umgeschaltet oder gesamten PORTA

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ilea Uni wrote:

> Hintergrund meiner Studienarbeit:
> Es gibt eine Master und 63 Slaveplatinen, wobei der Master alle
> asynchronischen Slave durch sog. angepassene "ID" ansteuern muss.

Also bei 63 Slaves halt ich Deine Methode für äußerst gewagt und 
bezweifle stark, daß sowas zuverlässig funktionieren kann.
Wie sollen da überhaupt Daten übertragen werden ?


> Leider ist hier die Möglichkeit durch SPI Daten zu übertragen oder
> anderen Datenübertragungsverfahren ausgeschlossen.

Was heißt das, "ausgeschlossen" ?

Es wäre jedenfalls einfacher und zuverlässiger.


In Deinem Code kann ich nirgends was sehen, was den Port umschaltet 
(Zugriff auf PORTx, DDRx).


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.