/* ------------------------------------------------- mpx_8digit.c Header zur Realisierung einer gemultiplexten 8-stelligen 7-Segmentanzeige und zusaetzlich 8 gemultiplexten Tastern. Modul ist nur verwendbar mit ATmega mit auf internem Takt eingestellten Fuses, da alle Portpins benoetigt werden (um die Leitungen des UART-Anschlusses frei zu halten). Es wird Timer1 fuer das Multiplexen verwendet MCU : ATmega168 - 8 MHz Takt intern Fuses: LO-> 0xE2 / HI-> 0xdf / EX-> 0xFF IDE : keine (Editor / make) Toolchain : AVR-GCC 31.01.22 by R. Seelig -------------------------------------------------- */ #ifndef in_mpx8 #define in_mpx8 #include #include #include #include #include "avr_gpio.h" /* Pinbelegung ATmega168 28 pol. +-------------+ /reset | 1 28 | PC5 PD0 | 2 27 | PC4 PD1 | 3 A 26 | PC3 PD2 | 4 T 25 | PC2 PD3 | 5 m 24 | PC1 PD4 | 6 e 23 | PC0 Vcc | 7 g 22 | Gnd Gnd | 8 a 21 | Aref PB6 - XTAL1 | 9 20 | AVcc PB7 - XTAL2 | 10 19 | PB5 - SCK PD5 | 11 18 | PB4 - MISO PD6 | 12 17 | PB3 - MOSI PD7 | 13 16 | PB2 PB0 | 14 15 | PB1 +-------------+ */ /* 12 11 10 9 8 7 : : : : : : a +----------------------------+ --- | seg4 seg3 seg2 seg1 | f | g | b | -- -- -- -- | --- | | | | | | | | | | e | | c | -- -- -- -- | --- | | | | | | | | | | d | -- -- -- -- | +----------------------------+ : : : : : : 1 2 3 4 5 6 Pin-Nr.: | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | ------------------------------------------------------------------------------- Segment | e | d | dp | c | g | GX1 | b | GX2 | GX3 | f | a | GX4 */ // Zuordnung der Anschluesse der 7-Segmentanzeige zu den Portpins // des Controllers #define kseg7 D4 #define kseg6 C5 #define kseg5 B7 #define kseg4 D3 #define kseg3 D2 #define kseg2 B2 #define kseg1 B4 // gleichzeitig auch MPX-Leitung fuer Tastenblock 1 #define kseg0 B5 // gleichzeitig auch MPX-Leitung fuer Tastenblock 0 #define seg_a B1 #define seg_b B0 #define seg_c C3 #define seg_d C1 #define seg_e C0 #define seg_f B3 #define seg_g C4 #define seg_dp C2 #define key_0_4 B6 #define key_1_5 D5 #define key_2_6 D6 #define key_3_7 D7 // Scancodes der Tasten #define key0 0x01 #define key1 0x02 #define key2 0x04 #define key3 0x08 #define key4 0x10 #define key5 0x20 #define key6 0x40 #define key7 0x80 #if defined __AVR_ATmega8__ #define TIMSK1 TIMSK #endif #include "mpx_conc.h" // Praeprozessor Headerfile fuer Erzeugung der Bit-Initialisierungen // der verwendeten Anschluesse extern volatile uint8_t seg7_fb[8]; extern volatile uint8_t key_stat; // Status der Tastatur (jede Taste repraesentiert ein // Bit der uint8_t Variable // mittels dig_pwm wird innerhalb des Interrupts eine Software-PWM realisiert, mittels // derer eine Helligkeitssteuerung eines einzelnen Digits erfolgen kann. Zulaessige Werte // fuer das Array sind 1..15. 1 entspricht volle Helligkeit, 15 entspricht sehr dunkel extern volatile uint8_t dig_pwm[8]; // Bitmapmuster der Ziffern 0..9,A..F (dezimale und alphanumerische Ziffern) extern uint8_t seg7_bmp[16]; // Maske fuer anzuzeigende Dezimalpunkte: 0x00 => alle DPs aus, 0xFF => alle DPs an extern uint8_t seg7_dpmask; /* -------------------------------------------------------- Prototypen -------------------------------------------------------- */ /* void seg7_initall(void); void key_initall(void); void seg7_setbmp(uint8_t bmp); void seg7_allclr(void); */ void fb_clear(void); void fb_sethexbyte(uint8_t val, uint8_t dpos); void fb_sethexint(uint16_t val, uint8_t dpos); void fb_sethexint32(uint32_t val); void fb_setdez2(uint8_t val, uint8_t dpos); void fb_setdezint(uint16_t val, uint8_t dpos); void fb_setdezint32(uint32_t val); void mpx8_init(void); #endif