Hallo liebe Kollegen, Suche hat nichts gebracht,bin Anfänger, bitte um Hilfe: AT90USB1287 Spannung am Spannungsteiler (versorgt mit NT): ca. 0,5V. Verbinde ich nun diesen mit dem Pin vom ADC: ca. 0,8V. Versorgung vom µC weg: wieder 0,5V. Was verursacht die Spannungssteigerung? Folgendes gemacht: GND vom Teiler liegt an GND vom µC. ADC Pin hochohmig ELKO 1µF verzögert nur, keine Wertänderung /"Hi, bei den Analogeingängen muß man aufpassen. Laut Datenblatt sollte die Ausgangsimpedanz der Quelle kleiner 10k sein."/ Vielleicht liegt es an der Impendanz? Kenne mich da überhaupt nicht aus... Danke im Voraus!
Andrey schrieb: > Vielleicht liegt es an der Impendanz? Kenne mich da überhaupt nicht > aus... Dann Oszi ranhängen und Bild posten...
Andrey schrieb: > Was verursacht die Spannungssteigerung? Interner Pullup? ADC doch als Ausgang und nicht als Eingang geschaltet? Die Pullups haben einen Widerstand von 20..50kOhm. Kommen die +0,3V mit deinem Spannungsteiler hin?
spess53 schrieb: > Hi > > Pull-Up-Widerstand eingeschaltet? > > MfG Spess Meinst Auf Eingang mit aktivem Port? Nein, momentan nur alles auf Ausgang bis auf den gebrauchten Pin. Exakt wie im Beispiel vom Prof... Dennis schrieb: > Andrey schrieb: >> Vielleicht liegt es an der Impendanz? Kenne mich da überhaupt nicht >> aus... > > Dann Oszi ranhängen und Bild posten... Wenn ich wüsste wie´s geht (bin überzeugt es wird nicht einfach wie eine Spannungsdifferenz gemessen) ;) Ich google mal, wenn ich rausfinde wie s geht, tue ichs gerne =)
Michael H. schrieb: > Andrey schrieb: >> Was verursacht die Spannungssteigerung? > Interner Pullup? ADC doch als Ausgang und nicht als Eingang geschaltet? > > Die Pullups haben einen Widerstand von 20..50kOhm. Kommen die +0,3V mit > deinem Spannungsteiler hin? DDRF = 0x7f; // PF7 auf Eingang, Rest ausgang Passt doch, oder?
Andrey schrieb: > ... bis auf den gebrauchten Pin... Du verwendest gebrauchte Pins? Kannst Du Dir keine neuen leisten? SCNR Harald
datenblatt lesen ! IO-Ports ! Innenbeschaltung angucken
Hi
>Exakt wie im Beispiel vom Prof...
Das will nichts heißen. Wie sieht denn dein Spannungsteiler aus. Auch
wenn der ADC-Eingang recht hochohmig ist, soll die Quellimpedanz <10k
sein.
MfG Spess
Andrey schrieb: > Passt doch, oder? Meinst du, einen Pullup bräuchte man bei einem Ausgang? Die gibts natürlich auch bei Eingängen. Also zeig mal den ganzen Code oder zumindest, was im PORTF Register steht. Wie sieht dein Spannungsteiler aus? Was passiert, wenn du dem ~35k nach 5V parallelschaltest? Ich prophezeie +0,3V...
spess53 schrieb: > Hi > >>Exakt wie im Beispiel vom Prof... > > Das will nichts heißen. Wie sieht denn dein Spannungsteiler aus. Auch > wenn der ADC-Eingang recht hochohmig ist, soll die Quellimpedanz <10k > sein. > > MfG Spess +12V -> NTC (momentan ca. 80kOhm)-> parallel: - ADC - 4,2kOhm -> GND - 1µF -> GND
Michael H. schrieb: > Andrey schrieb: >> Passt doch, oder? > Meinst du, einen Pullup bräuchte man bei einem Ausgang? Die gibts > natürlich auch bei Eingängen. > Also zeig mal den ganzen Code oder zumindest, was im PORTF Register > steht. > > Wie sieht dein Spannungsteiler aus? Was passiert, wenn du dem ~35k nach > 5V parallelschaltest? Ich prophezeie +0,3V... PORTF unbelegt...also Nuller...? Teiler siehe bitte oben. Danke!
Andrey. Ich will dir nicht ins Handwerk pfuschen. Aber wenn du qualifizierte Hilfe willst, dann * zeige deine Schaltung * zeige dein Programm Hör auf die Dinge zu beschreiben, sondern zeig sie einfach. * Eine Schaltung zeigt man am einfachsten, indem man einen Schaltplan postet. * Ein Programm zeigt man am einfachsten, indem du das Programm postest. Das hat den Vorteil, dass es für dich einfach ist, und die Helfer hier alle Informationen haben, die sie brauchen (und wenn nicht, dann fragen sie nach) Seit fast einer Stunde geht hier nix weiter. Hättest du gleich Schaltplan und Programm gezeigt, wäre dein Problem wahrscheinlich schon längst gelöst. Hilf UNS, DIR zu helfen!
1 | #include "avr/io.h" |
2 | #include "avr/wdt.h" |
3 | #include <stdint.h> |
4 | #include "avr/interrupt.h" |
5 | |
6 | |
7 | // Initialisierung der Prozessorperipherie
|
8 | |
9 | void system_init(void) |
10 | {
|
11 | // den Watchdog abschalten
|
12 | MCUSR=0; |
13 | wdt_disable(); |
14 | |
15 | // JTAG abschalten
|
16 | MCUCR=0x80; |
17 | MCUCR=0x80; |
18 | |
19 | // CPU Vorteiler 1:1 (Aufgabe 6 von V5)
|
20 | CLKPR=0x80; |
21 | CLKPR=0x00; |
22 | |
23 | // USART1 einstellen
|
24 | UBRR1 =25; |
25 | UCSR1A=0x00; |
26 | UCSR1B=0x98; |
27 | UCSR1C=0x06; |
28 | |
29 | // PORTE
|
30 | PORTE = 0x04; // zuerst nur die Ausgabe einer 0 an PE0 vorbereiten, LED aus, Pullup an PE2 (Boot) |
31 | DDRE |= 0x01; // jetzt PE0 auf Ausgabe stellen, das Modul ist ab jetzt sicher deaktiviert |
32 | DDRE |= 0x4A; // jetzt auch PE6 und PE1 auf Ausgang stellen, dazu PE3 wegen der LED |
33 | |
34 | DDRF = 0x7f; // PF7 auf Eingang, Rest ausgang |
35 | DDRB = 0x1F; // Fur LED |
36 | |
37 | DIDR0 = 0x80; // Eingangsbuffer abschalten |
38 | ADCSRA = 0x07; // ADC deaktiviert,Messung aus,Single Run,Interrupt aus,Teiler 128=125kHz |
39 | ADCSRB = 0x00; // Free Run if ADATE in ADSCRA set, ansonsten keine Wirkung |
40 | ADMUX = 0x67; // AVCC,linksbündig,ADC7 single ended (ohne Gain) |
41 | |
42 | //Timer0 Einstellungen fur die ISR
|
43 | // SREG = 0x80;
|
44 | TCCR0A = 0x02; //CTC-Mode |
45 | TCCR0B = 0x05; //CTC-Mode, Prescaler x1024 |
46 | OCR0A = 255; |
47 | TIMSK0 = 0x02; |
48 | TCNT0 = 0; |
49 | //TIFR0 = 0x02;
|
50 | |
51 | //Timer1 Einstellungen fur PWM
|
52 | TCCR1B = 0x00; // Zähler gestoppt |
53 | TCCR1A = 0x82; // OC.1A set at TOP, clear when OCR1A reached (siehe Table 14-2) |
54 | // OC.1B normal port, OC.1C normal port, Mode 14
|
55 | DDRB |= 0x20; // PB5 auf Ausgang setzen - sonst kommt nichts raus |
56 | ICR1 = 30; // Teilerfaktor setzen, im Mode 14 steht der Endwert in ICR1 - 64,5 kHz |
57 | TCCR1B = 0x18; // Mode 14, Zähler noch gestoppt |
58 | OCR1A = 22; // Mittelstellung bei 1,5ms |
59 | TCCR1B = 0x19; // Zähler laeuft! |
60 | }
|
61 | |
62 | volatile uint16_t i=0; |
63 | volatile int8_t x_k =0; // Ist-Wert |
64 | uint8_t w_k =0x3C; // Führungsgröße = 60° |
65 | volatile int8_t e_k =0; // Abweichung |
66 | volatile int8_t e_k_1 =0; // vorherige Abweichung |
67 | |
68 | uint8_t T =1; // Abtastperiode = ca. 1sek |
69 | double Kpr =-0.370370370; |
70 | double Kir =0.14285714; |
71 | double b0 =-0.370370370+0.14285714*1; //Kpr+Kir*T; |
72 | double b1 =0.370370370; //-(Kpr); |
73 | volatile uint8_t y_k =0; |
74 | volatile uint8_t y_k_1 =0; |
75 | |
76 | void adc_ein(void) |
77 | {
|
78 | ADCSRA |= 0x80; // ADC ein |
79 | }
|
80 | |
81 | void eine_messung(void) |
82 | {
|
83 | ADCSRA |= 0x40; // ADC-Messung starten |
84 | }
|
85 | |
86 | |
87 | |
88 | ISR(TIMER0_COMPA_vect) |
89 | {
|
90 | PORTB ^= 0x0C; // 4er blinken SIGNAL ISR EINGEGANEN |
91 | // PORTB ^= 0x02; // Schalte die grüne bei jedem Umlauf mal um
|
92 | eine_messung(); |
93 | while ( (ADCSRA & (0x40) )==(0x40) ) // Warten, bis Ergebnis im Register steht |
94 | {}
|
95 | |
96 | x_k = ADCH; // ADCH binär!!! |
97 | |
98 | |
99 | if(x_k>0x40) |
100 | {
|
101 | PORTB |= 0x02; // schalte grüne EIN, wenn Uref>1,25V |
102 | }
|
103 | |
104 | else
|
105 | {
|
106 | PORTB &= 0xFD; // schalte grüne AUS, wenn Uref<1,25V |
107 | }
|
108 | PORTB ^= 0x0C; // 4er blinken SIGNAL ISR VERLASSEN |
109 | }
|
110 | |
111 | int main(void) |
112 | {
|
113 | //uint16_t i=0;
|
114 | system_init(); |
115 | adc_ein(); |
116 | sei(); |
117 | while(1) |
118 | {
|
119 | PORTB ^=0x11; // LED EIN |
120 | |
121 | for(i=0;i<12000;i++){} |
122 | }
|
123 | return 0; |
124 | }
|
Ist unübersichtlich, hab es mit Internet gelernt. Hoffentlich hilft es, Danke Euch...
Hubert G. schrieb: > JTAG ist abgeschaltet? Wie du siehst. Einstellungen vom Prof übernommen. Da ich nicht weiss, was JTAG ist, habe ich es so gelassen, denn ADC scheint ja zu funzen.
ICh weiss nicht womit du den Kontroller programmierst. Wenn du es mit ISP machst, dann ist JTAG abzuschalten. Wenn du es mit JTAG machst, dann kannst du die PinF 4 bis 7 nicht verwenden. Fuseeinstellung siehe hier: http://www.engbedded.com/fusecalc/
Hubert G. schrieb: > ICh weiss nicht womit du den Kontroller programmierst. > Wenn du es mit ISP machst, dann ist JTAG abzuschalten. > Wenn du es mit JTAG machst, dann kannst du die PinF 4 bis 7 nicht > verwenden. > Fuseeinstellung siehe hier: > http://www.engbedded.com/fusecalc/ Ich programmiere es direkt im AVR mit einem Tool über USB. JTAG scheint es wohl nicht zu sein. Bin mir aber nicht sicher. Aber ADC macht was er soll, auch im Beispielprogramm vom Prof. Sorry, bin halt totaler Anfänger in der Sache....
Antwort vom Prof: Sehr geehrter Herr ..., wenn der Pin im offenen Zustand tatsächlich 4 MOhm Innenwiderstand hat, dann ist das Verhalten sehr seltsam. Im Moment der Messung wird der Innenwiderstand kurzfristig kleiner (wegen des Sample&Hold-Kondensators im Chip), aber das messen Sie ja nicht, das würde man nur am Oszilloskop sehen. Der Pin ADC7 hat ja noch die Zusatzfunktionen TDI (von JTAG) und PF7. Als erstes sollten Sie also sicherstellen, dass diese Funktionen keinen Einfluss haben. a) JTAG komplett deaktivieren Wenn JTAG aktivierbar ist, dann sind die Pullups an PF4-PF7 immer an, egal, was Sie einstellen . Das sagt Tabelle Table 10-19. Overriding Signals for Alternate Functions in PF7..PF4. Im Register MCUCR kann man zwar mit Bit 7 (JTD) die JTAG-Logik abstellen, aber offenbar nicht die Pullup-Übersteuerung. Leider kann man JTAGEN nur mittels eines Programmiergeräts ändern, da sich das Bit in einem Fuse Byte befindet: Table 29-4. Fuse High Byte (AT90USB128 : 0x99 - AT90USB64 : 0x9B) b) Digitalteil komplett abstellen, mittels Register DIDR0. DIDR0|=0x80; Probieren Sie erst mal, ob an einem der Eingänge ADC3-ADC0 das Problem auch auftritt, also z.B. an ACD3: DDRF &= ~(1<<3); // PF3 Eingang PORTF &= ~(1<<3); // PF3 ohne Pullup DIDR0 |= (1<<3); // PF3 keine Erkennung eines Digitalpegels nötig Wenn es dann mit PF3 funktioniert, dann liegt es bei PF7-PF4 am JTAG. Geben Sie mir dann noch Bescheid, was rauskam - ich habe das Problem bisher nicht gehabt oder nicht bemerkt. mfg, Prof. Dr.-Ing. ...
also zusammengefasst: er sagt dir genau das gleiche wie der rest hier auch... was machst du jetzt? liest du dich doch mal ein oder fragst du in einem anderen forum? ^^
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.