Forum: Mikrocontroller und Digitale Elektronik Programm bleibt hängen


von Dieter (Gast)


Lesenswert?

STK300 (ATmega103L)

hallo, folgendes Programm soll den Analog Digital Wandler meines STK300
ansprechen.

es bleibt aber hängen, und zwar an einer Stelle, die der CodeWizard von
CodeVisionAVR programmiert hat.

Hier das Programm mit markierter Stelle, wo's hängen bleibt.

Ich hoff jemand sieht durch, und kann mir helfen.

--------------------------------------------------------------

#include <mega103.h>
#include <stdio.h>
#include <delay.h>
#include <stdlib.h>

unsigned int adc_data;
// ADC interrupt service routine
#pragma savereg-
interrupt [ADC_INT] void adc_isr(void)
{
#asm
    push r30
    push r31
#endasm
// Read the AD conversion result
adc_data=ADCW;
#asm
    pop  r31
    pop  r30
#endasm
}
#pragma savereg+

// Read the AD conversion result
// with noise canceling
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input;
ADCSR&=0x7f;
ADCSR|=0xc0;
#asm
    in   r30,mcucr
    cbr  r30,__sm_mask

    sbr  r30,__se_bit -> bei diesem befehl bleibts hängen

    out  mcucr,r30 -> dieser Befehl wird schon nicht mehr ausgeführt
    sleep
    cbr  r30,__se_bit
    out  mcucr,r30
#endasm
return adc_data;
}
unsigned int Vmess;
float b;
char s[6];

void main(void)
{
PORTB=0xFF;
DDRB=0xFF;

PORTD=0x00;
DDRD=0x00;

// UART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// UART Receiver: On
// UART Transmitter: On
// UART Baud rate: 9600
UCR=0x18;
UBRR=0x19;

ACSR=0x80;

#asm("sei")

while (1)
      {

if (PIND.0==0)
  {
  printf ("gedrückt\n\r");
  Vmess=read_adc(0b00000000);   //wert aus ADCL und ADCH an Pin1
auslesen
  printf ("%7d",Vmess);
  Vmess*=5;
  b= Vmess/1023.0;
  printf("%f\n\r",b);
  ftoa(b,3,s);
  puts(s);
  putchar('\n');
  putchar('\r');
  delay_ms(400);
  }
      }
}

--------------------------------------------------------------

von Dieter (Gast)


Lesenswert?

man, ich such schon ne woche nach dem beschissenen fehler
... hab den wald vor lauter bäumen nicht gesehn.

ADCSR=0x8F; vergessen.

initialisierung vom ADC hat gefehlt ... ich könnt mir in den arsch
treten.

tja, menschliches versagen ...

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.