-schumi-
29.05.2012, 08:51
Hallo zusammen,
ich versteh hier grad nicht warum die PullUps am PORTC des Atmega32 sich nicht aktivieren lassen. Bei den Fuses ist Jtag ausgeschaltet (Im AVR8BurnOMat: Kein Haken bei Jtagen.
Der Code (Tast.h):
#ifndef _TAST_h_
#define _TAST_h_
void TAST_INIT (void);
char TAST1 (void);
char TAST2 (void);
#define TAST_PORT PORTC
#define TAST_DDR DDRC
#define TAST_PIN PINC
#define TAST_1 ( PIN 0)
#define TAST_2 ( PIN 1)
#define PIN 1<<
#endif
Tast.c:
#include "TAST.h"
#include <avr/io.h>
void TAST_INIT (void)
{
TAST_DDR &= ~(TAST_1 | TAST_2); // PC0 und PC1 auf Eingang
TAST_PORT |= TAST_1 | TAST_2; // PC0 und PC1 Pullups aktivieren
}
char TAST1 (void)
{
return (TAST_PIN&TAST_1)&&1;
}
char TAST2 (void)
{
return (TAST_PIN&TAST_2)&&1;
}
Mein Hauptprobramm ruft jetzt erst TAST_INIT() auf, und stellt dann die Rückgabewerte von TAST1() und TAST2() auf einem LCD dar. Das funktioniert auch hervorragend.
Meine Taster sind jetzt auf GND verbunden. D.h. unbetätigt (Schließer) sollte eine 1 rauskommen, betätigt eine 0. Wenn ich den Taster nicht drücke, zeigt er 1 an. Wenn ich den Taster drücke 0. Wenn ich den Taster wieder loslasse zeigt er die 1 erst wieder nach ca. 5 sec an. (Durch die Innenbeschaltung fließt ja etwas Strom in den Eingang -> quasi extrem hochohmiger Pullup).
Und wenn ich die 2 Pins berühre springen dir 0er und 1er nur so rum.
-> Offene Eingänge -> Pullups gehen nicht.
Aber warum??
Viele Grüße und vielen Dank schonmal
-schumi-
PS: Am PORTB hat das mit den Pullups auf Anhieb perfekt funktioniert (Dort werden Drehgeber ausgewertet, das oben sind die Taster in den Drehgebern)
ich versteh hier grad nicht warum die PullUps am PORTC des Atmega32 sich nicht aktivieren lassen. Bei den Fuses ist Jtag ausgeschaltet (Im AVR8BurnOMat: Kein Haken bei Jtagen.
Der Code (Tast.h):
#ifndef _TAST_h_
#define _TAST_h_
void TAST_INIT (void);
char TAST1 (void);
char TAST2 (void);
#define TAST_PORT PORTC
#define TAST_DDR DDRC
#define TAST_PIN PINC
#define TAST_1 ( PIN 0)
#define TAST_2 ( PIN 1)
#define PIN 1<<
#endif
Tast.c:
#include "TAST.h"
#include <avr/io.h>
void TAST_INIT (void)
{
TAST_DDR &= ~(TAST_1 | TAST_2); // PC0 und PC1 auf Eingang
TAST_PORT |= TAST_1 | TAST_2; // PC0 und PC1 Pullups aktivieren
}
char TAST1 (void)
{
return (TAST_PIN&TAST_1)&&1;
}
char TAST2 (void)
{
return (TAST_PIN&TAST_2)&&1;
}
Mein Hauptprobramm ruft jetzt erst TAST_INIT() auf, und stellt dann die Rückgabewerte von TAST1() und TAST2() auf einem LCD dar. Das funktioniert auch hervorragend.
Meine Taster sind jetzt auf GND verbunden. D.h. unbetätigt (Schließer) sollte eine 1 rauskommen, betätigt eine 0. Wenn ich den Taster nicht drücke, zeigt er 1 an. Wenn ich den Taster drücke 0. Wenn ich den Taster wieder loslasse zeigt er die 1 erst wieder nach ca. 5 sec an. (Durch die Innenbeschaltung fließt ja etwas Strom in den Eingang -> quasi extrem hochohmiger Pullup).
Und wenn ich die 2 Pins berühre springen dir 0er und 1er nur so rum.
-> Offene Eingänge -> Pullups gehen nicht.
Aber warum??
Viele Grüße und vielen Dank schonmal
-schumi-
PS: Am PORTB hat das mit den Pullups auf Anhieb perfekt funktioniert (Dort werden Drehgeber ausgewertet, das oben sind die Taster in den Drehgebern)