Entstehen soll ein Bild warauf max 16 Figuren zufällig gedreht werden.
Die Figuren überschneiden sich und so wird eine sich stehtig ändernde
Gesamtform erzeugt.
Ein Atini13A erzeugt eine Zufallszahl zwischen 1 und 255
Diese Zahl wird in das B-Register geschrieben.
Die Pins des Pregisters 0 1 2 und 3 werden mit einem 4 zu 16 Multiplexer
auf 16 Ausgänge gemultiplext. Es ist immer nur ein Ausgang aktiv.
CD74HC4067
Je 8 Leitungen werde mit 2 Darlington-Arrays ULN2803 ausgekoppelt.
Es gibt somit 16 belastbare Ausgänge zur Steuerung der Aktoren.
Weiter gibt es 16 LED's zur optischen Kontrolle.
Nicht nur die Aktoren sollen abwechselnd bewegt werden sondern auch die
Zeit wie lange das geschehen soll.
Hier der Code:
1 | /*
|
2 | * Biotronic.cpp
|
3 | * Attiny13A
|
4 | * Created: 11.11.2023 16:08:24
|
5 | * Author : ED
|
6 | */
|
7 |
|
8 | #include <avr/io.h> //Holt Grundfunktionen des Atmega
|
9 | #define F_CPU 1000000UL // 1 MHz
|
10 | #include <util/delay.h> //Bindet Wartefunktionen ein
|
11 | #include <stdlib.h>
|
12 | int i=0, pause=0 ; //Variablen dekarieren
|
13 |
|
14 | int main(void) //Jedes Programm braucht diese Startfunktion
|
15 | {
|
16 | DDRB = 0b11111111; //PORTB als Ausgang
|
17 | PORTB = 0b00000000; //alle PINS PORTB auf Low
|
18 |
|
19 | while (1) {
|
20 | // Zufallszahl 0 bis 15 generieren
|
21 | int zahl = rand() % 16; // random int between 0 and 15
|
22 | PORTB = zahl ; // Zufallszahl in PortB schreiben
|
23 |
|
24 | // Zufallszeit 1000 bis 10000 generieren
|
25 | int pause = rand() % 30; // random int between 0 and 29
|
26 | for (i = 0; i < pause; ++i); {
|
27 | _delay_ms (1000); //pause-mal durchlaufen
|
28 | }
|
29 | }
|
30 | }
|
Die zufällige Ansteuerung der 16 Ausgänge funktioniert.
Die zufällige Verzögerung funktioniert nicht.
_delay_ms braucht eine Konstante. Um ein variables Delay zu erreichen
wird _delay_ms (1000) mit der Zufallszahl pause random-mal durchlaufen.
Genau das geht bei mir nicht :-(
Was mache ich falsch?
Mit freundlichem Gruss ed