Hallo zusammen, ich habe folgende Seite http://www.elektronik-labor.de/AVR/Touch.html als Referenz genutzt, um einen kapazitiven Sensor für ATTiny13 nachzubauen. Da meine Bascom Kenntnisse eher bescheiden sind, habe ich versucht die paar Zeilen ins C zu übersetzen. Leider will meine LED mit C Code nicht leuchten. Mit Bascom funktioniert dies einwandfrei (auch mit 9.6 Mhz anstatt mit 1.2 Mhz) // Kapazitiver Touch-Sensor // 1,5 nF zwischen B3 und B4 // Sensorplatte an B4 // LED mit 1 k an B1 #define F_CPU 9600000 // 9.6 MHz #include <avr/io.h> #include <util/delay.h> #include <stdint.h> int main(void) { uint16_t i, d; DDRB |= (1 << PB1); while (1) { d = 1; for (i = 1; i < 1500; i++) { DDRB &= ~(1 << PB3); // B3 hochohmig PORTB |= (1 << PB4); // B4 high DDRB |= (1 << PB4); // B4 niederohmig if (!(PINB & (1 << PB3))) break; DDRB &= ~(1 << PB4); // B4 hochohmig PORTB &= ~(1 << PB4); // ohne Pullup DDRB |= (1 << PB3); // B3 high d++; } PORTB &= ~(1 << PB3); PORTB &= ~(1 << PB4); DDRB |= (1 << PB3); DDRB |= (1 << PB4); if (d < 5) PORTB |= (1 << PB1); else PORTB &= ~(1 << PB1); _delay_ms(50); } }
So wie ich das gesehen habe, hast du das BASCOM Programm korrekt
umgesetzt.
Nur eines:
Da ich erwarten würde, dass das C Programm schneller arbeitet als
BASCOM, müsstest du doch die Abfrage
if (d < 5)
erhöhen und nicht erniedrigen. Das C Programm würde d in derselben Zeit
(die Zeit ist ja durch den Kondensator vorgegeben) potentiell höher
zählen als BASCOM
aus Bascoms d < 30
würde ich mal d < 40 (50, 60, 70) machen.
Ich habe festgestellt dass die Variable d am Ende der Prüfung immer 2
ist.
Sprich mit
if (d == 2)
PORTB |= (1 << PB1);
else
PORTB &= ~(1 << PB1);
leuchtet die LED dauerhaft.
Das bedeutet er steigt bereits beim zweiten Durchlauf aus.
Ein größerer Kondensator bringt auch kein Licht ins Dunkle...
Danke für die Unterstützung. Es funktioniert soweit sehr zuverlässig. Sollte jemand ein ATTiny13 als Touch nutzen, stelle ich vorsichtshalber mein C Code hier rein. Wenn die Initialisierung OK ist, leuchtet die LED für 1 Sekunde auf.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
76 | |
77 | |
78 | |
79 | |
80 | |
81 | |
82 | |
83 | |
TOP, vielen Dank! Hab ewig rumgeschustert und nichts zustande gebracht bis ich endlich deinen Beitrag gefunden hab! Danke!
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.