Forum: Mikrocontroller und Digitale Elektronik Probleme mit AT908535 - ATMEGA8535


von Matthias (Gast)


Lesenswert?

Hallo

anbei der Code
ist für n AT90S8535 8mhz ausgelegt
hab aber nur n AT MEGA8535 16 mhz zuzeit da
sobald ich den code drauf schiebe
natürlich mit geänderter
#include zeile (#inc...mega8535...)
in code vision
schaltet der controller
alle ports auf 5 volt...
wo liegt da der fehler ?
sollte n vu meter für n spec analyzer werden..




#include <90s8535.h>
#include <stdio.h>


// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input;
// Start the AD conversion
ADCSR|=0x40;
// Wait for the AD conversion to complete
while ((ADCSR & 0x10)==0);
ADCSR|=0x10;
return ADCW;
}



// Initialisierungsroutine fuer den Prozessor

void McuInit(void)
{


DDRD=0xff;
DDRA=0xff;
DDRB=0xff;
DDRC=0xff;

// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge

OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;


// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
// Analog Comparator Output: Off

ACSR=0x80;
ADCSR=0x87;

}


void Ausgabe(unsigned int Wert)
{

  char c=0;
  char d=0;

  // Jetzt folgen ein paar frei erfundene Werte. Ich lege jetzt
  // mal z.B. 2V als maximalen Eingangswert fest und nenne
  // das +6dB. Dann ist:

  // 2,00V = +6dB = 1023 (nur Rechenbeispiel)
  // 1,41V = +3dB = 721 = alle LEDs an.
  // 1,26V = +2dB = 644
  // 1,12V = +1dB = 572
  // 1,00V = +0dB = 511
  // 0,89V = -1dB = 455
  // 0,79V = -2dB = 403
  // 0,71V = -3dB = 363 (alle LEDs von PortD an und PB0, PB1)
  // 0,63V = -4dB = 321 (alle LEDs von PortD an und PB0)
  // 0,56V = -4dB = 286 (alle LEDs von PortD an)
  // 0,50V = -6dB = 256
  // 0,45V = -7dB = 229
  // 0,40V = -8dB = 204
  // 0,35V = -9dB = 178
  // 0,32V = -10dB = 163 = 1.,2.,3. LED an (PD0, PD1, PD2)
  // 0,28V = -11dB = 142 = erste und zweite LED an (PD0, PD1)
  // 0,25V = -12dB = 128 = erste LED an (PD0)




  if (Wert>=128) d=1;
  if (Wert>=142) d=d+2;
  if (Wert>=163) d=d+4;
  if (Wert>=178) d=d+8;
  if (Wert>=204) d=d+16;
  if (Wert>=229) d=d+32;
  if (Wert>=256) d=d+64;
  if (Wert>=286) d=d+128;



  if (Wert>=286) c=c+1;
  if (Wert>=321) c=c+2;
  if (Wert>=363) c=c+4;
  if (Wert>=403) c=c+8;
  if (Wert>=455) c=c+16;
  if (Wert>=511) c=c+32;
  if (Wert>=572) c=c+64;
  if (Wert>=644) c=c+128;

  PORTC=c;
  PORTD=d;



}



void Schalten(void)
{
  char Kanalnummer;
  unsigned int Wert;

  Kanalnummer=0;

  while(Kanalnummer<32)
  {
    PORTB=Kanalnummer;

    a=0;
    while (a<2000)
    {
      a=a+1;
    }

    PORTB=Kanalnummer+128;

    Wert=read_adc(0);
    Ausgabe(Wert);

    Kanalnummer=Kanalnummer+1;
  }
}
void main(void) // Hauptprogramm
{
  unsigned int wert;
  char kanal;
  McuInit();
  while(1)
  {
    Schalten();
  }
 }

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.