Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > > > > > > > > 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 > > > > Hallo, > > > > zum Kondensator an Uref ist mir folgendes aufgefakllen: > > > > Uref ist eine Konstantspannung, Auf-und Entladezeiten sind hier unkritisch, der Kondensator diend > > lediclich zur Stabilisierung. Üblicherweise ist er 10 nF (wenn auch manchmal anders angegeben), > > allerdings gibt es verschiedene Materialien. SMD-Kondensatoren sind meist KDPU-Typen > > (Keramik-Schicht-Kondensatoren), die haben prinzipbedingt immer einen gewissen Leckstrom. > > Für höhere Ansprüche sollte man einen Folienkondensator verwenden, ist nur etwas grösser in der Bauform. > > > > Grüsse Tom > ------------------------------------------------------------------------------------------------- > Hallo, > ich habe den Kondensator jetzt rausgebaut. > Und siehe da, es funktioniert. > Das Problem wahr der wechsel der Referenzspannung von 5V auf 2,56V. > Ehe der Kondensator die Spannung abgebaut hat, wurde der Messwert schon einglesen. > z.B. > Meine Messspannung 2V ergibt bei Vref 2*1024/2,56 = 800 > Wenn jetzt ab dadurch Vref jetzt noch 3V hat, dann ergibt sich ja 2*1024/3V = 682 > > Was macht ihr, wenn jetzt noch die ext Referenzspannung dazu kommt? > Vref zb. 3V Dann liegt ja indem Moment bei Vref 5V auch 5V am Vref an. Dh. die 5V > liegen auch bei dem Ext.Vref Geber dann an. > Im ungünstigsten Fall, würde ich mir mein Bauteil zerschiessen. Dann würde nämlich 5V anliegen, anstatt 3V. > > Gruss Christian