Hi ich komme aus dem Linux berreich und habe kaum Ahnung von C. Skripten kann ich wie ein großer! schleifen for ++ alles nix neues im grunde habe ich damit auch nicht das Problem. Das ich über C noch einiges nachlesen muß weiß ich. Warum ein Attiny22? Weil ich den noch rumliegen habe von einem IR einschlalter. Und eigentlich ist es garnicht so schlecht es so zu machen. Dan bin ich gezwungen mal ins dateblatt zu schauen und mich damit auch auseinander zu setzen Nun muß ich noch wissen was ich machen will das ist meist das schwierigste. Ich könnte eine relaysteuerung brauchen (24 Volt) Als schonmal keine Baumarktlösung möglich. Runter mit den 24 V und 5 V davon gemacht. anstatt eine Relay erstmal eine LED angeschlossen. Und blinken lassen funkt gut. Da der ATtiny22 einen internen Timer hat will ich den auch nehmen. Die tolleranz ist OK. Ich versuche mir einen Timer einzurichten der der 6 Stunden wartet und dann ein Relay für 10 Minuten anzieht im Loop. Ich habe in Netz schon viel gefunden aber einmal ist es basecom oder asm. Da ich aber mehr darüber lernen will ist es wohl besser bei einer Sprache zu bleiben.Also C (wurde mir empfohlen). Ich habe in dem code noch überflüssige dringelassen weil ich es später weite aufbauen und experementieren will und vielleicht noch ein schalter und eine programmierung einbauen will. z.B. eimal drücken für 1 Std wartezeit 2 mal .... usw. Aber das erstmal nicht. Mein code läst sich nicht übersetzen weil die Timer aktivirung nicht stimmt. Wie müßte es aussehen und wo hätte ich die infos herkriegen können? Vielleicht beispiele die bei den ATtiny22 auch funktioniern http://attiny.com/software/ATtiny22.pdf Beruflich habe ich nix mit Computer oder Elektonik oder so zu tun. Das ist nur Hobby.
1 | # include <avr/io.h>
|
2 | # include <avr/interrupt.h>
|
3 | |
4 | //Variablen für die Zeit
|
5 | volatile unsigned int millisekunden=0; |
6 | volatile unsigned int sekunde=0; |
7 | volatile unsigned int minute=0; |
8 | volatile unsigned int stunde=0; |
9 | |
10 | void warte_ein (void) { |
11 | unsigned int i; // Schleifenvariablen erstmal 3 sekunden an |
12 | for( i = 0; i < 3; i++ ) { |
13 | while ( millisekunden = 1000 ) |
14 | }
|
15 | }
|
16 | |
17 | void warte_aus (void) { |
18 | unsigned int i; // Schleifenvariablen erstmal 15 sekunden aus |
19 | for( i = 0; i < 15; i++ ) { |
20 | while ( millisekunden = 1000 ) |
21 | }
|
22 | }
|
23 | |
24 | int main(void) { |
25 | DDRB = 0xFF; // Durch diese Anweisung werden alle Pin's von PORTB auf " Ausgabe " gesetzt |
26 | PORTB = 0; // Hiermit wird PORTB auf 0 gesetzt |
27 | //Timer 0 konfigurieren
|
28 | TCCR0 =(1<<CS00) |(1<<CS01); |
29 | OCR0=125; |
30 | |
31 | //Compare Interrupt aktivieren
|
32 | TIMSK|=(1<<OCIE0); |
33 | //Globale Interrupts aktivieren
|
34 | sei(); |
35 | //Der Compare Interrupt Handler
|
36 | //Wird aufgerufen wenn TCNT0 = 125
|
37 | //brauch ich das überhaupt?Ist das richtig so?
|
38 | //oder wie anders?
|
39 | ISR(TIMER0_OVF0_vect) { |
40 | millisekunden++; |
41 | if(millisekunden==1000) |
42 | {
|
43 | sekunde++; |
44 | millisekunden=0; |
45 | if(sekunde==60) |
46 | {
|
47 | minute++; |
48 | sekunde=0; |
49 | }
|
50 | if(minute==60) |
51 | {
|
52 | stunde++; |
53 | minute=0; |
54 | }
|
55 | }
|
56 | }
|
57 | //
|
58 | while (1) { |
59 | PORTB = ~PORTB; |
60 | warte_ein (); // Funktionsaufruf |
61 | PORTB = ~PORTB; |
62 | warte_aus (); |
63 | }
|
64 | }
|