Forum: Mikrocontroller und Digitale Elektronik Pin ansprechen bei Atmega 8


von AVR Anfänger (Gast)


Lesenswert?

Hy Leute! Beschäftige mich seit kurzem mit dem Atmega8 und dessen 
Programmierung. Ich hab ein Problem(Compiler schreit!!!)

Programmauschnitt:
..
if(PINB&0x01)   // möchte den Pin abfragen ob er High ist
{....

Bin Anfänger, also zähle ich auf eure Hilfe!!!

mfg

von Patrick (Gast)


Lesenswert?

Ich würde es so machen:

if (PINB==0x01){...

von AVR Anfänger (Gast)


Lesenswert?

Geht leider auch nicht!

von Patrick (Gast)


Lesenswert?

Wie wärs denn, wenn Du uns tiefere Einblicke in dein Programm gewährst? 
Oder ist das Top secret? Häng doch einfach mal Dein c-File an.

von R. M. (rmax)


Lesenswert?

@AVR Anfänger:
Was schreit denn der Compiler?

@Patrick:
Dein Code prüft nicht nur den einen Pin auf 1 sondern gleichzeitig alle 
anderen Pins dieses Ports auf 0, was wohl nicht das ist, was AVR 
Anfänger wollte.

von Patrick (Gast)


Lesenswert?

Hast Du denn alle nötigen Header-Files included?
#include <avr/io.h>

@Reinhard Max
Wäre es so besser:

if (PINB0==0x0x){..

von Patrick (Gast)


Lesenswert?

natürlich müsste es heissen:
if (PINB0==0x01){..

von R. M. (rmax)


Lesenswert?

Patrick wrote:
> Wäre es so besser:
>
> if (PINB0==0x0x){..

Nein, 0x0x wäre ein Syntax-Fehler. Um zu prüfen, ob ein bestimmtes Bit 
in einem Byte gesetzt ist, unabhängig davon, welche Werte die anderen 
Bits haben, kommst Du in C um den &-Operator nicht herum.

von Patrick (Gast)


Lesenswert?

oder direkt:

if (PINB0){...

von R. M. (rmax)


Lesenswert?

Patrick wrote:
> oder direkt:
>
> if (PINB0){...

Nein, PINB0 gibt lediglich die Bitposition des Pins innerhalb des 
entsprechenden Portbytes an. Korrekt wäre (untested)

if (PINB & 1<<PINB0) { ...

Weil das aber effektiv idenitsch ist, mit dem, was der OP ursprünglich 
dastehen hatte, habe ich erstmal nach der Fehlermeldung gefragt...

von Karl H. (kbuchegg)


Lesenswert?

Reinhard Max wrote:

> dastehen hatte, habe ich erstmal nach der Fehlermeldung gefragt...

... mit gutem Recht.
Warten wir mal, wenn er den Code postet.
Und wenn die erste Zeile nicht

#include <avr/io.h>

lautet, dann haben wir den Fehler gefunden :-)

von AVR Anfänger (Gast)


Lesenswert?

Thanx :)

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.