Re: ACD einlesen Kategorie: CC-Pro Unit & Appl.Board (von Torsten - 20.08.2010 9:01) | ||
Als Antwort auf Re: ACD einlesen von Christian - 19.08.2010 22:08 | ||
| ||
> > > > > Hallo, > > > > > > > > > > ich habe das Projektboard Mega128. Am ADC Port4 lese ich beim Start den Wert eines Potis > > > > > als Nullabgleich ein. Dort erhalte ich z.B. den Wert 730 zurück. > > > > > Später im eigentlichen Programm (in der Interruptrotine Timer_0 alle 10ms) bekomme ich den Wert ca. 520. > > > > > > > > > > Die 520 sind aber auch normal. > > > > > > > > > > Warum wird im Sub Main ein anderer Wert eingelesen als in der Interruptrotine? > > > > > > > > > > Der Wert wird wie folgt eingelesen. > > > > > > > > > > Dim Buf as Integer > > > > > ADC_Set(0xC0,4) 'Port4 - Refspannung 2,56V > > > > > Buf = ADC_Read() > > > > > > > > > > Bei den Anderen Port benutze ich auch die anderen Referenzspannungen > > > > > VCC '5V > > > > > Ext ca. 2,8V > > > > > > > > > > Was ist im Sub-Main anders als in der Interruptrotine? > > > > > > > > > > > > > > > 2. Frage: Bei dem Projektboard bekomme ich in der Interruptrotine keine Debug mehr hin. > > > > > Der Debugmode funktioniert nur beim Start in der Sub-Main bevor der Timer_0 gestartet wird. > > > > > > > > > > Gruss Christian > > > > > > > > Hallo, > > > > > > > > Der Wert, den der AD Wandler zurückgibt, errechnet sich wie folgt: > > > > > > > > Die Aüflösung des Wandlers ist Uref/1024 > > > > Der Messwert ist also Uref/Umess*1024 > > > > > > > > Wenn Du mit verschiedenen Referenzen arbeitest, bekommst Du natürlich auch verschiedene Messwerte!! > > > > > > > > Mit dem Debug kann ich Dir leider auch nicht helfen. > > > > > > > > Grüsse Tom > ----------------------------------------------------------------------------------------------------------------- > > Hallo Tom, > danke für die Antwort. Leider wusste ich das schon und bringt mich so nicht weiter. > > Ich habe jetzt folgendes festgestellt. > Wenn ich ADC_Read() 2x hintereinander aufrufe sind die Werte dann Normal. > z.b. > Dim Buf as Integer > Dim Buf1 as Integer > ADC_Set(ADC_VREF_BG,4) 'Port4 - Refspannung 2,56V > Buf = ADC_Read() > Buf = ADC_Read() > ADC_Set(ADC_VREF_VCC,1) 'Port4 - Refspannung 5,00V > Buf1 = ADC_Read() > Buf1 = ADC_Read() > > Ich hatte vorher ein Applikationboard, dort braucht ich nur einmal ADC_Read aufrufen. > Der einzige grosse Unterschied zwischen diesen beiden Boards ist der Kondensator am Aref. > Beim Applikationboard ist dieser in der SMD Bauform und beim Projektboard als Tropfenform ausgeführt. > Kann es sein das der Kondensator mir die Probleme auslöst. Ich habe auch das gefühl das die Werte schwanken. > So ein Kondensator braucht ja auch eine gewisse Zeit, eh er geladen/entladen ist. > Ich hatte mir die gleiche Schaltung aufgebaut mit dem selben Sensoren. > > Gruss Christian > > > Hallo Christian Mit einen 10pF Kondensator gegen Masse lä�t sich der Porteingang stabilisierten. Die AD-Wandlung braucht Zeit. Mein Vorschlag: word w_ad_value; void ThreadGetADValues(void) { while(true) { Thread_Wait(1, 1); ADC_Set(ADC_VREF_VCC, PORT_NR); ADC_StartInt(); Thread_Wait(1, 1); // w_ad_value verarbeiten SendToAuthor(w_ad_value); } } void InterruptADC(void) { w_ad_value = ADC_ReadInt() & 0x03FF; Irp_GetCount(INT_ADC); Thread_Resume(1); } void main(void) { Irq_SetVect(INT_ADC, InterruptADC); Thread_Start(1, ThreadGetADValues); while(true) { if(???) Thread_Resume(1); } } Torsten | ||
Antwort schreiben Antworten: Re: ACD einlesen (von tomsfinest - 21.08.2010 12:34) Re: ACD einlesen (von Christian - 21.08.2010 23:29) |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum