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


von Ilea U. (auftrag2007)


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.

von Peter D. (peda)


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

von Ilea U. (auftrag2007)


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/doc2466.pdf
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

von Peter D. (peda)


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

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.