Forum: Compiler & IDEs Atmel Programmierhilfe


von Markus J. (prostyla)


Lesenswert?

Hallo habe ein Problem, vielleicht könnt Ihr mir helfen.

Im ersten fall Hand funktioniert die &~ (undnicht) abfrage und im fall 
Automatik nicht ? Finde leider den Fehler nicht.

Atmega644 mit Pollin Board.


1
#define checkbit(var,bit) (var &(1<<bit))
2
#define setbit(var,bit) (var |= (1<<bit))
3
#define clearbit(var,bit) (var &= ~(1<<bit))
4
5
6
Hand//////////////////////////////////////////////////////////////
7
8
if(checkbit(PINB,3)&~ checkbit(PIND,3))    // Handbetrieb Ein
9
      {
10
        setbit (PORTD,0);          // Pumpe 1 Ein
11
        setbit (PORTD,1);          // Pumpe 2 Ein
12
        setbit (PORTD,2);          // Meldeleuchte Anlage Ein
13
      }                  
14
    else
15
      {
16
        clearbit (PORTD,0);          // Pumpe 1 Aus
17
        clearbit (PORTD,1);          // Pumpe 2 Aus
18
        clearbit (PORTD,2);          // Meldeleuchte Anlage Aus
19
      }                    // Ende Handbetrieb  
20
21
  /////////////////// Automatikbetrieb /////////////////////////////////////////////////////////
22
23
    if(checkbit(PINB,2)&~ checkbit(PIND,3))    // Automatikbetrieb Ein 
24
      {
25
        setbit (PORTD,2);          // Meldeleuchte Anlage Ein
26
      }                
27
    else
28
      {
29
        clearbit (PORTD,2);          // Meldeleuchte Anlage Aus
30
      }                    // Ende Automatikbetrieb

von Peter II (Gast)


Lesenswert?

was soll denn das darstellen?

1
if(checkbit(PINB,3)&~ checkbit(PIND,3))

was willst du damit erreichen? Schreibe es mal in klartext hin.

von Markus J. (prostyla)


Lesenswert?

Wenn PINB,3 gedrückt ist und nicht PIND,3 soll PORTD,2 gesetzt werden.

Komme aus der SPS vielleicht habe ich da eine Denkblockade

A   PINB,3----|&|
B   PIND,3---O| |-|=|PORTD,2

A=1 B=0 Ausgang 1
A=0 B=0 Ausgang 0
A=0 B=1 Ausgang 0
A=1 B=1 Ausgang 0

von cppler (Gast)


Lesenswert?

Leg Dir mal ein C buch zu.
Was du willst ist
1
if(checkbit(PINB,3) && !checkbit(PIND,3)) ...
Und dabei muß Dein checkbit einen bool zurückliefern !

von Karl H. (kbuchegg)


Lesenswert?

Markus J. schrieb:
> Wenn PINB,3 gedrückt ist und nicht PIND,3

dann schreib NICHT auch als NICHT: Ein ! und kein ~

von Karl H. (kbuchegg)


Lesenswert?

Und das UND schreibst du auch als logisches UND und nicht als bitweises.

&& anstelle von &

logische Operationen   && || !
bitweise Operationen   & | ~

von avr (Gast)


Lesenswert?

Wenn man schon mit Makros arbeitet (die man evtl. nicht versteht), dann 
sollten die Makros auch komfortabel sein. Checkbit sollte gleich einen 
boolean zurückgeben:
1
#define checkbit(var,bit) !!(var &(1<<bit))

von Markus J. (prostyla)


Lesenswert?

Danke für die schnelle Hilfe.

Ich habe gerade erst mit dem Thema Mikrocontroller angefangen. Die 
Makros sind von unserem Lehrer vorgegeben gewesen.

Danke für Eure hilfe.Es klappt jetzt prima

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.