Stoppuhr mit Arduino-Micro
(EN google-translate)
(PL google-translate)
Eine Uhr mit Hilfe eines FPGA-Bausteins herstellen ist eigentlich wie mit Kanonen auf Spatzen zu schießen.
Versuchen Sie doch einmal eine Stoppuhr mit Hilfe eines Arduino-Micro zu realisieren.
Verwenden Sie auch hier die Vierfach Sieben Segment-Anzeige LTC-2723WC.
Siehe dazu:
Um genügend digitale Ausgänge zu erhalten sollte der komplette PORTB mit einbezogen werden. Siehe dazu:
|
Teillösungen zu der vorangegangenen Übung:
SegAnsteuern.zip - Beispiellösung zu letzer Übung: 4fach 7-Segmentanzeige ansteuern.
//MICRO
//7-Segment-Anzeige
//Testprogramm
//
// A
// F B
// G
// E C
// D
//
#define Z0 0b01111110
#define Z1 0b00001100
#define Z2 0b10110110
#define Z3 0b10011110
// GFEDCBA
#define Z4 0b11001100
#define Z5 0b11011010
#define Z6 0b11111010
#define Z7 0b00001110
#define Z8 0b11111110
#define Z9 0b11011110
int z = 0;
int zaehler = 0;
unsigned char digit[] = {Z0,Z1,Z2,Z3,Z4,Z5,Z6,Z7,Z8,Z9};
void setup()
{
//A-G OUT
//........GFEDCBA
DDRB |= 0b11111110;
//D1-D4 OUT
//..........D43:21
DDRD |= 0b00011111;
//D1-D5 auf 5V
//...........D43:21
PORTD |= 0b00011111;
}
void loop()
{
PORTD |= 0b00011111;
PORTD &= 0b00011110;
PORTB = digit[zaehler];
delay(1);
PORTD |= 0b00011111;
PORTD &= 0b00011101;
PORTB = digit[zaehler];
delay(1);
PORTD |= 0b00011111;
PORTD &= 0b00010111;
PORTB = digit[zaehler];
delay(1);
PORTD |= 0b00011111;
PORTD &= 0b00001111;
PORTB = digit[zaehler];
delay(1);
z++;
z%=1000;
zaehler = z/100;
}
Code 0-1: SegAnsteuern.ino
SegAnsteuernOOP.zip - OOP Beispiellösung. (Hinweis für die, die da waren: An einer Stelle stand inx%5; statt inx%=5;)
#include "Arduino.h"
//MICRO
//7-Segment-Anzeige
//Testprogramm
//
// A
// F B
// G
// E C
// D
//
class Digits
{
private:
const unsigned char digits[10] = {0b01111110,0b00001100,0b10110110,0b10011110,0b11001100,
0b11011010,0b11111010,0b00001110,0b11111110,0b11011110};
int inx = 0;
public:
void start()
{
//A-G OUT
//........GFEDCBA
DDRB |= 0b11111110;
//D1-D4 OUT
//..........D43:21
DDRD |= 0b00011111;
//D1-D5 auf 5V
//...........D43:21
PORTD |= 0b00011111;
}
void show(int nummer) // 0...9999
{
PORTD |= 0b00011111;
switch(inx)
{
case 0:
PORTB = digits[nummer/1000];
break;
case 1:
PORTB = digits[(nummer/100)%10];
break;
case 2:
PORTB = 0;
break;
case 3:
PORTB = digits[(nummer/10)%10];
break;
default:
PORTB = digits[nummer%10];
break;
}
PORTD &= ~(1<<inx);
inx++;
inx%=5;
}
};
Code 0-2: Digits.h
#include "Digits.h"
long z = 0;
int zaehler = 0;
int zahl = 0;
Digits digits;
void setup()
{
digits.start();
}
void loop()
{
digits.show(z/10);
z++;
z%=100000;
delay(5);
}
Code 0-3: SegAnsteuernOOP.ino