Hallo, Ich verwende einen ATmega1248p mit 20 MHz Takt. Der Controller sitzt auf eine Platine OHNE MasseFläche. Die Potentiometer sind 7 x 10k schiebePotis die mit einem bandkabel an den Controller gesteckt werden. Ich lese hier schon nur 8 Bit des adc's aus und die haben leider schon starke Schwankungen... Sprich die letzte stelle schwankt um 3-4 werte... Hab schon einige Beiträge im Forum gelesen und würde mir gerne ein paar Punkte zusammen stellen mit denen ich die werte genauer hin bekomm... Falls ein Schaltplan oder Programm benötigt wird kann ich das gerne hochladeb bin allerdings gerade nur mit dem Handy unterwegs. Wär wirklich super wenn einige ein paar Punkte aufzählen könnten um dir werte genau zu kriegen, da der Wert ja um insgesamt 3 Bits schwankt was ja nicht gerade wenig ist... Danke im voraus!
Hallo, mach es wie in meiner Schaltung, dann funktioniert es. Kann sie aber gerade leider nicht hochladen da ich mit dem Handy unterwegs bin. Ein Foto geht auch nicht da die Schaltung nicht dort ist wo gerade das Handy ist. So weit schon mal die ersten Tipps entsprechend dem Informationsgehalt deiner Frage.
1nF zwischen ADC-Input-Pin und Mess-Opfer? Oder hier mal lesen, spuckt die Suche nach "ADC Schwankungen" gleich als erstes aus: Beitrag "Atmega168 ADC - Schwankungen/Beeinflussungen vom Nachbarpin"
KÖnnte auch ein Softwareproblem sein. Zu kleiner / zu grosser ADC Prescaler
Karl Heinz schrieb: > KÖnnte auch ein Softwareproblem sein. Könnte alles sein, Der TO sollte sich an die Netiquette bzgl Problembeschreibung halten und an Bildformate
voerst Danke! 1nF zwischen adc eingang und Messleitung? nicht gegen GND? Prescaler habe ich 128 gewählt lieg also ca bei 156kHz
Andy002 schrieb: > Falls ein Schaltplan oder Programm benötigt wird ... Sehr gut, damit würde man weiter kommen.
Andy002 schrieb: > 1nF zwischen adc eingang und Messleitung? nicht gegen GND? Bitte die aktuelle Schaltung als Schaltplan darstellen, sonst drehen wir uns hier noch mehr im Kreis.
Andy002 schrieb: > Ich lese hier schon nur 8 Bit des adc's aus und die haben leider schon > starke Schwankungen... Sprich die letzte stelle schwankt um 3-4 werte... Was meinst du mit "letzte Stelle" bei 8Bit. In einer Binärdarstellung kann die nur "0" oder "1" sein. Vielleicht zeigst du einfach mal die Verteilungsfunktion der Werte ...
Ich denke er meint wenn er den Wert zwischen 0 und 255 darstellen lässt, schwangt der hintere Wert, sprich, die letzten 2 Bits
Ich würde sagen 42. Eine Analogmessung besteht aus einem Sack voll Code: Geht ja keinen war an! Eine Analogmessung benötigt analoge Wege (Layout/Verdrahtung): Geht ja keinen was an! Eine konstante Spannung zu messen ist Beutelschneiderei: Vielleicht schwankt die Spannung ja würglüch?
Amateur schrieb: > Vielleicht schwankt die Spannung ja würglüch? Oder die Referenz eiert wegen massiver Störungen, fehlender Abblockung oder mangels Stützkondensator durch die Gegend. Oder die Settling-Time am Mux ist zu kurz, oder, oder, oder ...
Jaja... Beim Erfassen von analogen Signalen wird das Rad immer wieder neu erfunden.
Ich meine bei der 8 Bit Auflösung schwankt die letzte stelle... Schaltplan und Code werde ich hochladen sobald ich Zugang zu den Unterlagen heute habe... Deswegen hab ich es ja angeboten muss man nicht gleich so aufbrausend kommen^^ Naja ganz im Gegenteil eigentlich... Hab schon oft den adc eingesetzt und drauf geachtet dass alles passt... Die Schwankungen war nie vorhanden und wenn dann minimal und nicht auffallend... Auch der Controller mit adc wurde schon eingesetzt allerdings mit 16 MHz und 10 Bit Auflösung Hab allerdings jetzt ein jahr pause gemacht was die Mikrocontroller betrifft da übersieht man dann schon eine Kleinigkeit die das ganze zu schaukeln bringen kann... Auch das PlatinenLayout wurde nicht gerade optimal erstellt aber seht später selbst
Ich habe gestern für meine Stabilisierung aus jeweils 100nF für Vcc/AVcc und einem gemeinsamen 10µF-Kerko letzteren durch einen "großzügig dimensionierten" 10µF Tantal ersetzt. Das reicht schon, um gemütlich um 2 LSB zu pendeln; zuvor waren Sprünge um absolut +/-3 bis 5 drin, jetzt eben sehr viel ruhiger maximal +/-2 absolut. Warte noch auf Ferritperlen und auf 1µF Kerkos. Mit den beiden sollte 1 LSB Auflösung schaffbar sein.
Oszilloskop vorhanden? Wenn ja mal VCC Analog GND AVRef und das Signal selbst messen. Wenn da einer Schwingt wirkt sich das eher kontraproduktiv auf die Messung aus...
Siebzehn Zu Fuenfzehn schrieb: > Die letzte (binaer-) Stelle schwankt immer. Naja in meinem Fall kommen die 2 nicht ausgelesen bits ja noch dazu (bit adc) also wär die schwankung noch größer Fabian F. schrieb: > Oszilloskop vorhanden? > Wenn ja mal > VCC > Analog GND > AVRef > und das Signal selbst messen. > > Wenn da einer Schwingt wirkt sich das eher kontraproduktiv auf die > Messung aus... Oszi hab ich leider keins da sonst hätt ich den Fehler schon längst eliminieren können ;) Also ich hab schon mal den Fehler gemacht den VCC für die Slider nicht an der Signalbahn, die beim AVCC vorbei läuft ab zu greifen. An der Buchsenleiste wird ein Bandkabel eingesteckt, dass direkt an die 10 Slider geht. GND und VCC sind an den Slidern mit Drähten durchgebrückt.
Andy002, warum ist der ADC des AVR nicht so wie von Atmel vorgegeben verdrahtet ? Zwei Elkos ist verkehrt verschaltet.
Uwe S. schrieb: > Andy002, > > warum ist der ADC des AVR nicht so wie von Atmel vorgegeben verdrahtet ? > > Zwei Elkos ist verkehrt verschaltet. sind zwei Kerkos. einer auf ARef Pin und einer zwischen AVCC und GND dachte das passt soweit?!
M. P. schrieb: > Andy002 schrieb: >> sind zwei Kerkos. > > C2 und C11? dachte die Glättungskondensatoren müssen an den 7805 ?? ein Kerko vor VCC und GND ein Kerko vor AVCC und GND und ein Kerko auf AREF und GND jeweils vor und nach den 7805 und 7803 einen Kerko mit 100nF C11 ein Pufferkondensator C2 ein Glättkondensator ist das falsch??
C10 ist für die Reset schaltung beim einschalten C13 C14 am Quarz
Udo Schmitt schrieb: > Karl Heinz schrieb: >> KÖnnte auch ein Softwareproblem sein. > > Könnte alles sein, Der TO sollte sich an die Netiquette bzgl > Problembeschreibung halten und an Bildformate > Bildformate > Bildformate > Bildformate > Bildformate > Bildformate Ohne Bild?
:-) schrieb: > Udo Schmitt schrieb: >> Karl Heinz schrieb: >>> KÖnnte auch ein Softwareproblem sein. >> >> Könnte alles sein, Der TO sollte sich an die Netiquette bzgl >> Problembeschreibung halten und an Bildformate > >> Bildformate >> Bildformate >> Bildformate >> Bildformate >> Bildformate > > Ohne Bild? habs auch mit dem Orginale Code aus dem Tutorial probiert...
1 | #define F_CPU 20000000
|
2 | |
3 | #include <avr/io.h> |
4 | #include <util/delay.h> |
5 | #include <stdio.h> |
6 | #include <avr/interrupt.h> |
7 | #include "lcd-routines-SPI_20MHz.h" |
8 | |
9 | // Diese Beispiel zeigt die Anwendung des ADC eines ATmega169
|
10 | // unter Verwendung der internen Referenzspannung von nominell 1,1V.
|
11 | // Zur Anpassung an andere AVR und/oder andere Referenzspannungen
|
12 | // siehe Erläuterungen in diesem Tutorial und im Datenblatt
|
13 | |
14 | /* ADC initialisieren */
|
15 | void ADC_Init(void); |
16 | |
17 | /* ADC Einzelmessung */
|
18 | uint16_t ADC_Read( uint8_t channel ); |
19 | |
20 | /* ADC Mehrfachmessung mit Mittelwertbbildung */
|
21 | /* beachte: Wertebereich der Summenvariablen */
|
22 | uint16_t ADC_Read_Avg( uint8_t channel, uint8_t nsamples ); |
23 | |
24 | /* Beispielaufrufe: */
|
25 | |
26 | int main( void ) |
27 | {
|
28 | DDRB = 0xFC; |
29 | PORTB |= (1<<PORTB2); |
30 | |
31 | uint16_t adcval; |
32 | char Buffer[20]; |
33 | ADC_Init(); |
34 | |
35 | |
36 | |
37 | spi_LCD_init(); |
38 | lcd_init(); |
39 | |
40 | while( 1 ) { |
41 | adcval = ADC_Read(0); // Kanal 0 |
42 | // mach was mit adcval
|
43 | |
44 | //adcval = ADC_Read_Avg(0, 8); // Kanal 2, Mittelwert aus 4 Messungen
|
45 | // mach was mit adcval
|
46 | |
47 | lcd_setcursor(0,1); |
48 | sprintf(Buffer, "%d ", adcval); |
49 | lcd_string(Buffer); |
50 | }
|
51 | }
|
52 | |
53 | /* ADC initialisieren */
|
54 | void ADC_Init(void) { |
55 | |
56 | // die Versorgungsspannung AVcc als Refernz wählen:
|
57 | ADMUX = (1<<REFS0); |
58 | // oder interne Referenzspannung als Referenz für den ADC wählen:
|
59 | // ADMUX = (1<<REFS1) | (1<<REFS0);
|
60 | |
61 | // Bit ADFR ("free running") in ADCSRA steht beim Einschalten
|
62 | // schon auf 0, also single conversion
|
63 | ADCSRA = (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0); // Frequenzvorteiler |
64 | ADCSRA |= (1<<ADEN); // ADC aktivieren |
65 | |
66 | /* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man liest
|
67 | also einen Wert und verwirft diesen, um den ADC "warmlaufen zu lassen" */
|
68 | |
69 | ADCSRA |= (1<<ADSC); // eine ADC-Wandlung |
70 | while (ADCSRA & (1<<ADSC) ) { // auf Abschluss der Konvertierung warten |
71 | }
|
72 | /* ADCW muss einmal gelesen werden, sonst wird Ergebnis der nächsten
|
73 | Wandlung nicht übernommen. */
|
74 | (void) ADCW; |
75 | }
|
76 | |
77 | /* ADC Einzelmessung */
|
78 | uint16_t ADC_Read( uint8_t channel ) |
79 | {
|
80 | // Kanal waehlen, ohne andere Bits zu beeinflußen
|
81 | ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F); |
82 | _delay_ms(1); |
83 | ADCSRA |= (1<<ADSC); // eine Wandlung "single conversion" |
84 | while (ADCSRA & (1<<ADSC) ) { // auf Abschluss der Konvertierung warten |
85 | }
|
86 | return ADCW; // ADC auslesen und zurückgeben |
87 | }
|
88 | |
89 | /* ADC Mehrfachmessung mit Mittelwertbbildung */
|
90 | /* beachte: Wertebereich der Summenvariablen */
|
91 | uint16_t ADC_Read_Avg( uint8_t channel, uint8_t nsamples ) |
92 | {
|
93 | uint32_t sum = 0; |
94 | |
95 | for (uint8_t i = 0; i < nsamples; ++i ) { |
96 | sum += ADC_Read( channel ); |
97 | }
|
98 | |
99 | return (uint16_t)( sum / nsamples ); |
100 | }
|
Hi Andy002, also kennst Du nicht die vielen Application Notes von Atmel. Wenn man sich daran hält hätte man weniger Probleme. Die sind ALLE auf der Atmel Webseite zu deinem AVR µC gelistet. Speziell fehlt mir hier eine C-L-C Filter vor dem AVcc Eingang.
Aufgrund der Diskrepanz zwischen Text (20) und Schaltplan (16) könnte ein Böswilliger auf die Idee kommen, dass der uC in Wirklichkeit noch mit der Standardeinstellung (1 MHz) läuft.
Uwe S. schrieb: > Hi Andy002, > > also kennst Du nicht die vielen Application Notes von Atmel. > Wenn man sich daran hält hätte man weniger Probleme. > > Die sind ALLE auf der Atmel Webseite zu deinem AVR µC gelistet. > > Speziell fehlt mir hier eine C-L-C Filter vor dem AVcc Eingang. Nein das ist mir jetzt neue! Hast du vielleicht einen link an der Hand? Ansonsten Werd ich nach der Arbeit daheim gerne auch selber suchen. Aver danke! Hoffe ich komm da auf einen Fehler... der alte Hanns schrieb: > Aufgrund der Diskrepanz zwischen Text (20) und Schaltplan (16) > könnte ein Böswilliger auf die Idee kommen, dass der uC in Wirklichkeit > noch mit der Standardeinstellung (1 MHz) läuft. Nein zuerst war 16mhz vorgesehen deswegen 16 MHz im Schaltplan verbaut wurden aber 20 MHz und das ist ja der entscheidende Punkt... Die fuse sind auch richtig gesetzt hab's bereits getestet und quch schon die usart und timer benutzt die hätten ja dann nicht richtig funktioniert...
Ups Andy002, ich hätte nicht gedacht, dass Dir die Hersteller URL fehlen würde. Hier ist der Link: http://www.atmel.com/ Klickt man einmalig gelangt man hier hin: # http://www.atmel.com/products/microcontrollers/avr/default.aspx
Uwe S. schrieb: > Ups Andy002, > > ich hätte nicht gedacht, dass Dir die Hersteller URL fehlen würde. > > Hier ist der Link: http://www.atmel.com/ > > Klickt man einmalig gelangt man hier hin: > > # http://www.atmel.com/products/microcontrollers/avr... Herstellen ist mir schon bekannt allerdings kenn ich mich auf der Seite nicht aus also wäre es hilfreich gewesen (falls zu ihn zur Hand gehabt hättest was ich ja sagte) wenn du mir einen direkt-link geschickt hättest DANKE
Hi http://www.atmel.com/Images/Atmel-2521-AVR-Hardware-Design-Considerations_Application-Note_AVR042.pdf MfG Spess
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.