Forum: Mikrocontroller und Digitale Elektronik Probleme mit Bitmanipulation


von J. T. (chaoskind)


Lesenswert?

MoinMoin liebes Forum,
ich hab ein kleines Problem mit den Bitmanipulationen(Atmel Studio 6.1).

Ich wollte ein kleines Progrämmchen schreiben, um mich ans Messen mit 
dem ADC per Interrupt zu machen.
Dazu hab ich mir eine Variable ISR_Flags erstellt, in welcher das LSB 
gesetzt wird(in der ISR) wenn die Messung abgeschlossen ist, und wieder 
auf Null gesetzt werden soll, wenn die Messung fertig ist, und eine 
Konstante Messungkomplett die auf 0b00000001 gesetzt ist.

Wenn ich das ganze dann per
1
ISR_Flags |= (1<<Messungkomplett)

versuche zu setzen, wird mir das vom Studio als Fehler angekreidet, in 
Registern ala ADCSRA funktioniert das ohne Mosern.

Kann mir wer sagen, welchen Denkfehler ich hier mache, oder ob des 
Studio spinnt? Ich meine, soetwas schonmal genauso gelöst zu haben, hab 
das aber nicht mehr auf meiner Festplatte....

hier nochmal der Code in seiner Gesamtheit:
1
/*
2
 * MotorBla.c
3
 *
4
 * Created: 27.02.2014 19:14:55
5
 *  Author: Ich
6
 */ 
7
8
9
#define F_CPU 8000000UL
10
11
#include <avr/io.h>
12
#include <avr/interrupt.h>
13
14
15
16
#define Messungkomplett 0b00000001;
17
18
19
void SystemStart(void);
20
void ADC_Messenstart(uint8_t Channel);
21
22
23
24
uint8_t ISR_Flags = 0;
25
26
uint16_t ADC_Channel0 = 0;
27
28
29
ISR(ADC_vect)
30
{
31
  ADC_Channel0 = ADC;
32
  ISR_Flags |= (1<<Messungkomplett);  
33
}
34
35
int main(void)
36
{
37
    while(1)
38
    {
39
        
40
    }
41
}
42
43
44
void SystemStart(void)
45
{
46
  TCCR1A |= (1<<COM1A1)|(1<<WGM11)|(1<<WGM10);      //Timer1-
47
  TCCR1B |= (1<<WGM12)|(1<<CS00);              //Initialisierung
48
  
49
  ADCSRA |= (1<<ADEN)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS2);    //Analog-Digital-Converter Initialisierung
50
}
51
52
void ADC_Messenstart(uint8_t Channel)
53
{
54
  if(Channel == 0)
55
  {
56
    ADMUX = 0;
57
    ADCSRA |= ADSC;
58
    ISR_Flags &= ~(1<<Messungkomplett);
59
  }
60
}

MfG Chaos

von holger (Gast)


Lesenswert?

>#define Messungkomplett 0b00000001;

#define Messungkomplett 0b00000001

Mach nie ein Semikolon an das Ende eines #define.

von J. T. (chaoskind)


Lesenswert?

AAAAAHHHHHHH

wunderbar, vielen dank dafür =), ich war schon am Verzweifeln. Das 
kleine Mistding hab ich irgendwie immer übersehen, da die Fehlermeldung 
mir was in der genannten Zeile erzählt hat, von wegen es würd ne Klammer 
fehlen.

Nun geht es

von Karl H. (kbuchegg)


Lesenswert?

j. t. schrieb:
> AAAAAHHHHHHH
>
> wunderbar, vielen dank dafür =), ich war schon am Verzweifeln. Das
> kleine Mistding hab ich irgendwie immer übersehen, da die Fehlermeldung
> mir was in der genannten Zeile erzählt hat, von wegen es würd ne Klammer
> fehlen.

:-)

Und da hat der Compiler ja auch vollkommen recht.

In
1
ISR_Flags |= (1<<0b00000001;);
fehlt ja auch tatsächlich die ) vor dem ersten ;

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.