kramann.info
© Guido Kramann

Login: Passwort:










9 Stoppuhr mit Arduino-Micro

9 Stopwatch with Arduino Micro (EN google-translate)

9 Stoper z Arduino Micro (PL google-translate)

Eine Uhr mit Hilfe eines FPGA-Bausteins herstellen ist eigentlich wie mit Kanonen auf Spatzen zu schießen.

Creating a watch with the help of an FPGA module is actually like using it Guns on sparrows to shoot.

Stworzenie zegarka za pomocą modułu FPGA w rzeczywistości przypomina korzystanie z niego Strzelaj na wróble, aby strzelać.

Versuchen Sie doch einmal eine Stoppuhr mit Hilfe eines Arduino-Micro zu realisieren.

Try to make a stopwatch with the help of an Arduino-Micro.

Postaraj się zrobić stoper za pomocą Arduino-Micro.

Verwenden Sie auch hier die Vierfach Sieben Segment-Anzeige LTC-2723WC.

Again, use the Quadruple Seven Segment Display LTC-2723WC.

Ponownie użyj wyświetlacza cztero segmentowego LTC-2723WC.

Siehe dazu:

See:

Zobacz:

http://www.kramann.info/69_FPGA/22_Uebung

Um genügend digitale Ausgänge zu erhalten sollte der komplette PORTB mit einbezogen werden. Siehe dazu:

To get enough digital outputs, the complete PORTB should be included be included. Se

Aby uzyskać wystarczającą liczbę wyjść cyfrowych, należy dołączyć kompletny PORTB być uwzględnione. Zobac

http://www.kramann.info/96_Arduino/22_Universal/02_LED_Leiste
  • Überlegen Sie sich selber eine Beschaltung
  • Denken Sie auch sorgfältig über eine sinnvolle Programmstruktur nach.
  • Versuchen Sie das Gesamtprojekt objektorientiert umzusetzen.

Teillösungen zu der vorangegangenen Übung:

Partial solutions to the previous exercise:

Częściowe rozwiązania poprzedniego ćwiczenia:

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 9-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 9-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 9-3: SegAnsteuernOOP.ino