Forum: Mikrocontroller und Digitale Elektronik AVR Pin Abfrage, einfaches Problem


von Patrick (Gast)


Lesenswert?

Guten Morgen

Ich habe ein einfaches Problem, bei dem ich aber noch nicht die Lösung 
gefunden habe.

Ich möchte einfach eine Pin Abfrage machen, folgender Code:

#include <avr/io.h>
#include <delay.h>
#include <stdio.h>


inline uint8_t debounce(volatile uint8_t *port, uint8_t pin)
{
if ( ! (*port & (1 << pin)) )
{
/* Pin wurde auf Masse gezogen, 100ms warten */
_delay_ms(50); // max. 262.1 ms / F_CPU in MHz
_delay_ms(50);
if ( *port & (1 << pin) )
{
/* Anwender Zeit zum Loslassen des Tasters geben */
_delay_ms(50);
_delay_ms(50);
return 1;
}
}
return 0;
}
int main(void)
{
DDRC &= ~( 1 << PC7 ); /* PIN  auf Eingang (Taster) */
PORTC |= ( 1 << PC7 ); /* Pullup-Widerstand aktivieren */

if (debounce(&PINC, PC7)) /* Falls Taster an PIN  gedrueckt.. */
PORTC = PINC ^ ( 1 << PC4 ); /* ..LED an Port  anbzw. ausschalten */

}

Leider kommt immer die Fehlermeldung das PC7 nicht deklariert ist, wie 
kann ich abfragen ob an einem Pin high liegt ohne Pxn ? (x..Port, 
n..Pinnummer)

../test.c:25: error: 'PC7' undeclared (first use in this function)
../test.c:25: error: (Each undeclared identifier is reported only once
../test.c:25: error: for each function it appears in.)

In jedem Tutorial wird Pxn verwendet....

Ich würde mich über eine Hilfestellung freuen

lg

von Johannes M. (johnny-m)


Lesenswert?

Patrick wrote:
> Leider kommt immer die Fehlermeldung das PC7 nicht deklariert ist, wie
> kann ich abfragen ob an einem Pin high liegt ohne Pxn ? (x..Port,
> n..Pinnummer)
>
> ../test.c:25: error: 'PC7' undeclared (first use in this function)
> ../test.c:25: error: (Each undeclared identifier is reported only once
> ../test.c:25: error: for each function it appears in.)
Hat Dein Controller denn überhaupt einen Pin 7 am Port C? Ich vermute 
mal nein.... Da Du nicht erzählst, mit welchem AVR Du arbeitest, musst 
Du es selber nachsehen. Ansonsten mal sicherstellen, dass der im 
Makefile eingestellte µC auch dem entspricht, den Du programmieren 
willst.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Ein ATtiny25 hat keinen Pin C7!

von Patrick (Gast)


Lesenswert?

Es handelt sich um einen ATMega8 16PU... wenn ich mich nicht verlesen 
habe gibt es einen Port C und Pin 7

von Johannes M. (johnny-m)


Lesenswert?

Patrick wrote:
> Es handelt sich um einen ATMega8 16PU...
Weiß der Compiler das auch?

EDIT:
Der Mega8 hat übrigens keinen Pin 7 an Port C! Du hast Dich also 
offensichtlich tatsächlich verlesen...

von Patrick (Gast)


Lesenswert?

hmm komisch ich hatte mir dieses Bild angesehen

http://schnoell.tgm.ac.at/assets/images/autogen/a_mega8-anschlussbelegung2.gif

da gibts einen Port C mit Pin 7 , möglicherweise ist das ein falsches 
Bild

... ich wollte ein funktionierendes Programm um die Tasteneingabe 
erweitern, ich nehme an dass das Makefile richtig ist...

von lkmiller (Gast)


Lesenswert?

Das Bild ist nicht falsch, sondern nur unvollständig.
Du verwendest den PD7.
Nach dem Bild könnte man auch meinen, es gäbe den PC1 doppelt.

Atmel gibt seine Datenblätter kostenlos zum Download frei,
is das nix?

von Johannes M. (johnny-m)


Lesenswert?

Patrick wrote:
> da gibts einen Port C mit Pin 7 , möglicherweise ist das ein falsches
> Bild
Das Bild ist bis auf die beschissene Auflösung schon richtig. Und einen 
PC7 gibt es da auch nicht. Ich frage mich nur, wozu es eigentlich 
Original-Datenblätter vom Hersteller gibt...

von Johannes M. (johnny-m)


Lesenswert?

lkmiller wrote:
> Das Bild ist nicht falsch, sondern nur unvollständig.
> Du verwendest den PD7.
> Nach dem Bild könnte man auch meinen, es gäbe den PC1 doppelt.
Stimmt, das PD7 sieht tatsächlich aus wie PC7... Wer stellt eigentlich 
derart beschissene Bilder ins Netz?

von Elektroniker (Gast)


Lesenswert?

Ich vermute mal das du C7 mit D7 (PIN13) verwechselst,
zumindest sieht das D bei deinem Bild aus wie ein C.
Schau doch mal hier:

http://www.roboternetz.de/wissen/index.php/Atmel_Controller_Mega8

von Patrick (Gast)


Lesenswert?

Das war der Fehler!! Vielen Dank, jetzt funktioniert es !

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.