Hallo Leute.
Ich habe vor einigen Monaten meine Testschaltung mit den ADC-Ports des 1280 getestet, da lief noch alles ohne Probleme. Jetzt habe ich mein Board hier mit genau dieser Schaltung und es läuft nicht.
Klar ich dachte als erstes Mist, irgendwo ein Fehler auf den Board also zuerst mit der (feinen) Prüfspitze vom Oszi an den PortPIN und siehe da, wenn meine ADC-Linie offen ist, habe ich 0V, im 2. Zustand habe ich 1,85V und im 3. Zustand 2,54V
Aber selbst das einfache TestADC-Programm (siehe Unten) bringt immer nur den selben Wert 1022.
Mein AREF Pin habe ich mit einem NoiseFilter verschaltet. Und ich bin mir eigentlich sicher das genau diese Abfrage mit einer älteren Version von AVRco ohne Probleme lief.
Oder habe ich im Programm doch einen Denkfehler?
program TestADC;
{$NOSHADOW}
{ $WG} {global Warnings off}
Device = mega1280, VCC=5;
{ $BOOTRST $0F000} {Reset Jump to $0F000}
Define_Fuses
Override_Fuses;
NoteBook = E;
COMport = USB;
LockBits0 = [];
FuseBits0 = [];
FuseBits1 = [SPIEN, JTAGEN, OCDEN];
ProgMode = JTAG;
Import SysTick, SerPort, ADCPort;
//From System Import LongWord, LongInt;
Define
ProcClock = 16000000; {Hertz}
SysTick = 10; {msec}
StackSize = $0200, iData;
FrameSize = $0200, iData;
SerPort = 57600, Stop1; {Baud, StopBits|Parity}
RxBuffer = 8, iData;
TxBuffer = 8, iData;
// Analog Input
ADCchans = 8, iData, int2; // = [n], iData; = [m,n], iData;
ADCpresc = 128;
Implementation
{$IDATA}
{--------------------------------------------------------------}
{ Type Declarations }
{--------------------------------------------------------------}
{ Const Declarations }
{--------------------------------------------------------------}
{ Var Declarations }
{$IDATA}
VAR
// Allgemeine Vars
TempInt : Integer;
TempWord : Word;
{--------------------------------------------------------------}
{ functions }
{--------------------------------------------------------------}
{ Main Program }
{$IDATA}
begin
EnableInts;
// Warte kurz...
mDelay(400);
// Start-Meldung
WriteLn(serout, 'DEGUG; System gestartet....');
// Ab hier Zyklus start...
loop
mDelay( 1000 );
TempWord:= GetAdc( 1 );
WriteLn(serout, 'Zustand ADC 1: '+ IntToStr( TempWord ) );
endloop;
end TestADC.
Achso, diesen Zustand habe ich bei allen ADC-Ports!
Gruß
Thorsten
Ich habe vor einigen Monaten meine Testschaltung mit den ADC-Ports des 1280 getestet, da lief noch alles ohne Probleme. Jetzt habe ich mein Board hier mit genau dieser Schaltung und es läuft nicht.
Klar ich dachte als erstes Mist, irgendwo ein Fehler auf den Board also zuerst mit der (feinen) Prüfspitze vom Oszi an den PortPIN und siehe da, wenn meine ADC-Linie offen ist, habe ich 0V, im 2. Zustand habe ich 1,85V und im 3. Zustand 2,54V
Aber selbst das einfache TestADC-Programm (siehe Unten) bringt immer nur den selben Wert 1022.
Mein AREF Pin habe ich mit einem NoiseFilter verschaltet. Und ich bin mir eigentlich sicher das genau diese Abfrage mit einer älteren Version von AVRco ohne Probleme lief.
Oder habe ich im Programm doch einen Denkfehler?
Code
program TestADC;
{$NOSHADOW}
{ $WG} {global Warnings off}
Device = mega1280, VCC=5;
{ $BOOTRST $0F000} {Reset Jump to $0F000}
Define_Fuses
Override_Fuses;
NoteBook = E;
COMport = USB;
LockBits0 = [];
FuseBits0 = [];
FuseBits1 = [SPIEN, JTAGEN, OCDEN];
ProgMode = JTAG;
Import SysTick, SerPort, ADCPort;
//From System Import LongWord, LongInt;
Define
ProcClock = 16000000; {Hertz}
SysTick = 10; {msec}
StackSize = $0200, iData;
FrameSize = $0200, iData;
SerPort = 57600, Stop1; {Baud, StopBits|Parity}
RxBuffer = 8, iData;
TxBuffer = 8, iData;
// Analog Input
ADCchans = 8, iData, int2; // = [n], iData; = [m,n], iData;
ADCpresc = 128;
Implementation
{$IDATA}
{--------------------------------------------------------------}
{ Type Declarations }
{--------------------------------------------------------------}
{ Const Declarations }
{--------------------------------------------------------------}
{ Var Declarations }
{$IDATA}
VAR
// Allgemeine Vars
TempInt : Integer;
TempWord : Word;
{--------------------------------------------------------------}
{ functions }
{--------------------------------------------------------------}
{ Main Program }
{$IDATA}
begin
EnableInts;
// Warte kurz...
mDelay(400);
// Start-Meldung
WriteLn(serout, 'DEGUG; System gestartet....');
// Ab hier Zyklus start...
loop
mDelay( 1000 );
TempWord:= GetAdc( 1 );
WriteLn(serout, 'Zustand ADC 1: '+ IntToStr( TempWord ) );
endloop;
end TestADC.
Achso, diesen Zustand habe ich bei allen ADC-Ports!
Gruß
Thorsten
Attachments
Filename: | ArefNoiseFilter.jpg |
Filesize: | 115.25 KB |
Title: | Schaltung NoiseFilter |
Information: | Schaltung NoiseFilter |
Download counter: | 132 |