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.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.