Forum: Mikrocontroller und Digitale Elektronik ADC Initialisierung bei Mega8


von Hubert Papst (Gast)


Lesenswert?

Hallo zusammen,
ich habe schon öfters hier im Forum geblättert. Da ich jetzt vor einem 
konkreten Problem stehe, habe ich mich eingeklinkt. Vielleicht kann mir 
jemand bei meinem trivialen Problem (für Profis in dieser Materie) 
helfen.
Habe ein Board mit Mega8, der mit 16MHz getaktet wird. Soweit 
funktioniert auch alles. Wollte jetzt den ADC mal testen und probieren, 
bekomme ihn aber nicht zum laufen. Auch nicht mit der Simulation beim 
Studio.
Kann Studio den ADC nicht simulieren (Auf Eingang einen Analogwert 
geben) oder was mache ich falsch? Ich beschreibe die Register ADCSR mit 
0hE7 und das Reg. ADMUX mit 0h00.
Bitte um Eure Hilfe.
mfg
Hubert

von mikki merten (Gast)


Lesenswert?

Im AVR Studio wird eine Simulation des ADC nicht unterstützt.

von Markus Burrer (Gast)


Lesenswert?

Nur zur Sicherheit: hast Du AVDD, AGND und AREF richtig angeschlossen?

von Hubert Papst (Gast)


Lesenswert?

denke schon:
AVDD direkt an +5V Versorgung, AGND auch direkt an GND und AREF wieder 
direkt an +5V.
Muss ich ev. beim schreiben in die beiden Reg. ADCSR und ADMUX eine 
best. Reihenfolge beachten?

Bin für jede Hilfe dankbar.

von Markus Burrer (Gast)


Lesenswert?

Womit programmierst Du eigentlich? ASM oder C? Und verwendest Du einen 
Mega8 im DIP oder TQFP Gehäuse? Beim DIP fehlen ja zwei Eingänge. Nicht, 
das du versuchst die zu verwenden ;)

von Hubert Papst (Gast)


Lesenswert?

im TQFP Gehäuse. Es handelt sich um das Mega8 Mini Modul RS232 von 
http://www.katalog.embedit.de/index.html?controller.htm

von Markus Burrer (Gast)


Lesenswert?

Hm, das Modul kenn ich natürlich (habs ja entwickelt :).
Hab grad zusammen mit dem Prototypen des dazu passenden Application 
Boards einen Test gemacht. Alles funktioniert wie erwartet. Leider kann 
ich Dir bei der Initialisierung in ASM oder C (noch) nicht helfen, da 
ich derzeit in Pascal programmiere.
Das sieht dann in etwa so aus (das Display wird über I2C angesteuert):

program LCDTest;

{ $BOOTRST $00C00}         {Reset Jump to $00C00}
{$NOSHADOW}
{ $W+ Warnings}            {Warnings off}

Device = mega8, VCC=5;

Import SysTick, ADCPort, LCDmultiPort, TWImaster;

From System Import ;

Define
        ProcClock    = 16000000;       {Hertz}
        SysTick      = 10;             {msec}
        StackSize    = $0064, iData;
        FrameSize    = $0064, iData;
        ADCchans     = 2, iData;
        ADCpresc     = 128;
        TWIpresc     = TWI_BR400;
        LCDmultiPort = I2C_TWI;
        LCDrows_M    = 4;             {rows}
        LCDcolumns_M = 16;            {columns per line}
        LCDtype_M    = 44780;

Implementation

{$IDATA}

{--------------------------------------------------------------}
{ Type Declarations }

type


{--------------------------------------------------------------}
{ Const Declarations }


{--------------------------------------------------------------}
{ Var Declarations }
{$IDATA}
var
   temp      : word;
   LCD_num   : TLCD_num;
   st1       : string[10];


{--------------------------------------------------------------}
{ functions }



{--------------------------------------------------------------}
{ Main Program }
{$IDATA}

begin
  LCDsetup_M(LCD_m2);
  LCDcursor_M(LCD_m2, true, false);
  EnableInts;
  loop
      temp:=GetADC(1);
      st1:=IntToStr(temp);
      LCDClr_M(LCD_M2);
      write(LCDOut_M, st1);
      mDelay(10);
  endloop;
end LCDTest.

von Hubert Papst (Gast)


Lesenswert?

Ja hallo - so trifft man sich wieder.

Programmiere in Assembler mit AVR-Studio. Mit Pascal hab ich eigentlich 
gar nix am Hut. Aber ist egal.
Werde heut abend noch mehrere Versuche machen und vielleicht bekommt ich 
es in den Griff.
Sonst hoffe ich, darf ich noch weiter lästig sein.

von Markus Burrer (Gast)


Lesenswert?

Klar. Das Support Forum befindet sich eigentlich auf www.embedit.de, 
aber ich bin ja nicht so ;)
Wenns aber um Hardwaresachen oder Pascal Programmierung geht sollte man 
aber schon dort posten

von BernhardT (Gast)


Lesenswert?

Hubert schau dir das Datenblatt mal genauer an. Da hat sich was mit den 
Registern geändert also nicht mehr ADCSR sondern ADCSRA... 0hE7 müsste 
aber gehen. Aber nagel mich nicht drauf fest-'hab eben keinen Zugriff 
auf meine Codes.

Gruß Bernhard

von Hubert Papst (Gast)


Lesenswert?

Ja, danke das ist mir schon aufgefallen und hab dies auch kontrolliert.
ADCSRA ist im Datenblatt angegeben und ist auf der I/OAdr:0h06. Im 
Studio wird der Name ADCSR erwartet (M8def.inc) und verweist auch auf 
die I/O Adr: 0h06.
Also das stimmt schon zusammen.

von Hubert Papst (Gast)


Lesenswert?

Hab's jetzt auch geschafft. War ein dummer Fehler beim Auslesen der 
AD-Werte.
Vielen Dank nochmal an die angebotene Hilfe.

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
Noch kein Account? Hier anmelden.