Hallo, ich habe schon mehrere Threads in diesem Forum über den AD-Wandler vom ATmega32 gelesen. Nichts hat so richtig zu meinem Problem gepasst. Ich würde gerne eine Schaltung aufbauen, und an die Eingänge vom ATmega Solarpanels hängen. Die Spannung der Panels soll vom ATmega verglichen werden, um bei bestimmten Abweichungen untereinander die Ausgänge zu beschalten. Jetzt habe ich bei Conrad verschiedene Solarpanels gefunden, die mir auch verschiedene Spannungen und Ströme liefern. Meine Frage jetzt: 1. Ich weis nicht, welche Spannungen und Ströme ich auf den AD-Wandler des ATmegas geben kann (was er aushält ohne zerstört zu werden)? 2. Der AD_Wandler hat eine Auflösung von 10-Bit, gibt es mC die eine höhere Auflösung haben, z.B. 16 bit? Wenn ja, welche sind das? 3. Die Eingänge des ATmega ADC0 bis ADC7 sind die AD-Wandler Eingänge. Ist es möglich, da ich 5 Sensoren habe, immer 2 davon irgendwie zu vergleichen, und die übrige als Referenzspannung zu bestimmen? Ich würde z.B. gerne den Eingang ADC0 mit dem Eingang ADC1 vergleichen. Aber gleichzeitig würde ich gerne den Sensor an z.B.ADC4 mit den übrigen 4 Eingängen vergleichen. Wenn ADC4 größer ist als alle anderen, dann soll er .... tun, wenn er kleiner ist, als irgendeiner, dann soll geschaut werden, ob z.B. die Sensoren an ADC0 und ADC1 gleich sind, wenn das nicht der Fall ist dann soll er ... tun. Das war jetzt vielleicht etwas weit ausgeholt, sorry. Kurz: Ich will mit dem uC einen Sonnensensor bauen, mit 5 Solarzellen. LG und schönes WE.
Hans Peter schrieb: > Jetzt habe ich bei Conrad verschiedene Solarpanels gefunden, die mir > auch verschiedene Spannungen und Ströme liefern. > Meine Frage jetzt: > 1. Ich weis nicht, welche Spannungen und Ströme ich auf den AD-Wandler > des ATmegas geben kann (was er aushält ohne zerstört zu werden)? Dein oberes Limit ist die Versorgungsspannung des Mega. Im Normalfall sind das 5V. Aber der Spannungsteiler ist schon erfunden, mit dem man zb 12V auf 5V herunterteilt. Um den Strom brauchst du dir keine Sorgen machen. Der AD Wandler zieht nur soviel Strom, wie er braucht. > 2. Der AD_Wandler hat eine Auflösung von 10-Bit, gibt es mC die eine > höhere Auflösung haben, z.B. 16 bit? Wenn ja, welche sind das? Wie genau brauchst du das denn? Bei 5V kannst du theoretisch die Spannung auf ~5mV genau messen. Für die meisten Anwendungen ist das mehr als ausreichend. Vor allem mit dem Hintergrund, dass du ja auch Störungen und äussere Einflüsse mitmisst. Ohne speziellen Aufbau ist es gar nicht so einfach die Auflösung eines 16-Bit Wandlers auch sinnvoll zu nutzen. Im Vergleich: Klar kann man Entfernungen auch auf 1/10000 Millimeter messen. Nur braucht ein Maurer nun mal nicht diese Genauigkeit. Für den reicht es schon, wenn seine Mauer auf den Zentimeter genau ist. > 3. Die Eingänge des ATmega ADC0 bis ADC7 sind die AD-Wandler Eingänge. > Ist es möglich, da ich 5 Sensoren habe, immer 2 davon irgendwie zu > vergleichen, und die übrige als Referenzspanung zu bestimmen? Das machst du in Software. Erst einen Eingang lesen dann den anderen Eingang lesen dann die beiden Werte vergleichen Das nennt man dann programmieren, wenn man mit gemessenen Werten anhand einer Logik neue Werte berechnet und die wiederrum mit anderen Werten verknüpft und davon abhängig irgendwelche Vorgänge auslöst. > Ich würde z.B. gerne den Eingang ADC0 mit dem Eingang ADC1 vergleichen. > Aber gleichzeitig würde ich gerne den Sensor an z.B.ADC4 mit den übrigen > 4 Eingängen vergleichen. Wenn ADC4 größer ist als alle anderen, dann > soll er .... tun, wenn er kleiner ist, als irgendeiner, dann soll > geschaut werden, ob z.B. die Sensoren an ADC0 und ADC1 gleich sind, wenn > das nicht der Fall ist dann soll er ... tun. Macht man alles in Software. Und die zu entwickeln wird dir noch viel Kopfzerbrechen, aber auch viel Spass bringen.
Wenn du so geil auf einen 16Bit ADC bist, dann kannst du die Messungen natürlich auch über einen externen ADC machen. Bedenke aber, das du dann auch noch einen externen Multiplexer brauchst um die Messtellen auf den ADC zu schalten. Das ganze Zeugs hast du aber beim ATmega in einem Stück. Alles andere hat kbuchegg ja schon verklickert.
Ich bin nicht geil, sondern ich würde gerne eine Sensor bauen, der eine sehr hohe Empfindlichkeit hat. Und ich dachte mir, desto höher die Auflösung, desto genauer kann ich auf die kleinsten Unterschiede bei den Eingängen reagieren, oder sehe ich das falsch? LG
Hans Peter schrieb: > Ich bin nicht geil, sondern ich würde gerne eine Sensor bauen, der eine > sehr hohe Empfindlichkeit hat. Und ich dachte mir, desto höher die > Auflösung, desto genauer kann ich auf die kleinsten Unterschiede bei den > Eingängen reagieren, oder sehe ich das falsch? Auflösung und Genauigkeit sind 2 verschiedene paar Schuhe. Wie genau willst du denn die Spannung messen bzw. wie genau brauchst du es denn?
Hallo, da es sich ja um eine Nachführung handelt, wird in diesem Fall die Genauigkeit in Grad angegeben. Die Genauigkeit soll max. 0,25 Grad sein, besser wäre noch darunter. Wenn ich doch 10 Bit habe, 2^10 ist 1024, Der abgefahrene Winkel ist von 10° bis 170°. Dann entspricht: 160° = 1024 Werten 1° = 6,4 0,2° = 1,28 Habe ich da einen Denkfehler? LG
Hallo, muss noch mal was fragen. Ich will wie bereits erwähnt, jeweils 2 Eingänge miteinander vergleichen. Über den AD-Wandler. Habe vier Sensoren, jedes Sensorpaar soll miteinander verglichen werden. Ich stelle es mir nicht so schwer vor, die Eingänge abzufragen, und dann miteinander zu vergleichen. aber ich brauche keine Referenzspannung, oder die Referenzspannung soll der andere Eingang sein. Kann ich jetzt trozdem den AD-Wandler benutzen, auch ohne exteren/interne Referenzspannung? Habe mir mal ein Testprog geschrieben, wo eine Spannung am AD Wandler anliegt, und ich mit einem Poti die Werte verändern kann, am Ausgang waren LED´s angeschlossen. Jetzt will ich aber 2 Eingänge einlesen, und dann je nach dem welche Spannung anliegt, verschiedene Ausgänge schalten. Das war der Code von damals. Kann ich nicht die Funktion ReadChannel etwas abändern und in der main einfach die funktion auf z.B. Eingang 0 und 1 anwenden? Oder lege ich die exteren Ref Spannung von 5V an, und vergleiche jeden Eingang mit dieser Spannung. Die Differenzen die bei den Vergleichen enstehen, vergleiche ich dann miteinander?
1 | #include <avr/io.h> |
2 | #include <stdint.h> |
3 | |
4 | uint8_t i; |
5 | uint16_t adc_wert; |
6 | |
7 | |
8 | uint16_t ReadChannel(uint8_t mux) |
9 | |
10 | {
|
11 | uint8_t i; |
12 | uint16_t result; |
13 | |
14 | ADMUX = mux; // Kanal waehlen |
15 | ADMUX &= ~(1<<REFS1); |
16 | ADMUX |= (1<<REFS0); // interne Referenzspannung nutzen |
17 | |
18 | ADCSRA = (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0); // Frequenzvorteiler |
19 | // setzen auf 8 (1) und ADC aktivieren (1)
|
20 | |
21 | /* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man liest
|
22 | also einen Wert und verwirft diesen, um den ADC "warmlaufen zu lassen" */
|
23 | ADCSRA |= (1<<ADSC); // eine ADC-Wandlung |
24 | while ( ADCSRA & (1<<ADSC) ) { |
25 | ; // auf Abschluss der Konvertierung warten |
26 | }
|
27 | result = ADCW; // ADCW muss einmal gelesen werden, |
28 | // sonst wird Ergebnis der nächsten Wandlung
|
29 | // nicht übernommen.
|
30 | |
31 | /* Eigentliche Messung - Mittelwert aus 4 aufeinanderfolgenden Wandlungen */
|
32 | result = 0; |
33 | for( i=0; i<4; i++ ) |
34 | {
|
35 | ADCSRA |= (1<<ADSC); // eine Wandlung "single conversion" |
36 | while ( ADCSRA & (1<<ADSC) ) { |
37 | ; // auf Abschluss der Konvertierung warten |
38 | }
|
39 | result += ADCW; // Wandlungsergebnisse aufaddieren |
40 | }
|
41 | ADCSRA &= ~(1<<ADEN); // ADC deaktivieren (2) |
42 | |
43 | result /= 4; // Summe durch vier teilen = arithm. Mittelwert |
44 | |
45 | return result; |
46 | }
|
47 | |
48 | int main() |
49 | {
|
50 | DDRB = 0xFF; |
51 | |
52 | while( 1 ) |
53 | {
|
54 | PORTB = ReadChannel( 0 ) / 4; |
55 | }
|
56 | }
|
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.