Hallo Leute, ich erzeuge mit dem Atmega8 und dem Timer1 ein Taktsignal (T = 0,2ms Ton = 0,1ms). Dazu habe ich den Timer so eingestellt das es alle 0,1ms zu einem Overflow kommt und die entsprechende ISR aufgerufen wird. In dieser ISR toggle ich die Pins PD6 und PD7 (Beide als Ausgang geschaltet). Analog Comperator habe ich explizit deaktiviert. An die Ausgänge ist soweit noch nichts angeschlossen, nur das Oszi (anbei das Bild). PD7 im Bild die untere Wellenform PD6 im Bild die obere Wellenform Sieht wohl danach auch das sich der Pin PD7 verabschiedet hat, könnt ihr das bestätigen?
Patrick L. schrieb: > Sieht wohl danach auch das sich der Pin PD7 verabschiedet hat, könnt ihr > das bestätigen? Das könnte genauso ein nicht auf Ausgang geschalteter Pin sein, dem du den Pullup zu und wegschaltest und dessen Ausgangsspannung deshalb durch kleine Kapazitäten sich nur langsam abbaut. So ein µC hält schon ein etwas aus. So schnell ist der nicht hinüber. Zeig halt mal dein Programm, dann kann man genaueres sagen. Aber aus der Erfahrung heraus: in mehr als 95% sitzt das Problem vor dem Bildschirm und nicht auf der Platine.
Hier mal der Code...
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 | |
Gast
#3046099
Den gleichen infomationsgehalt des Bildes kann man doch sicher in < 5kB unterbringen?
Gast
#3046103
Hi
>DDRD |= (1 << DDD6) | (DDD7);
Damit schaltest du PD6,PD2,PD1 und PD0 auf Ausgang.
MfG Spess
Gast
#3046111
nur schonmal vorweg: DDRD |= (1 << (DDD6 | DDD7)); wäre auch falsch ;-) Grundlagen!
Gast
#3046116
Patrick L. schrieb: > DDRD |= (1 << DDD6) | (DDD7); // PD6, PD7 as Output versuchs mal mit DDRD |= (1 << DDD6) | (1 << DDD7)
Ach, verdammt bin ich Blind, soll natürlich so aussehen: DDRD |= (1 << DDD6) | (1 << DDD7); // PD6, PD7 as Output Jetzt fluppt es, peinlich peinlich. Danke für die schnelle Hilfe.
Noch eine Kleinigkeit: Die beiden Befehle
1 | |
2 | |
kannst Du auch in einer Anweisung machen:
1 | |
Dann passiert es gleichzeitig statt kurz nacheinander. Außerdem wäre der CTC-Modus des Timers geeigneter. Dann kannst Du Dir das Laden des Counter-Registers sparen.
Gast
#3046270
Menschen, nutzt mehr Makros ;-) : DDRD |= _BV(DDD6) | _BV(DDD7); (Wollte nur auch was dazu sagen ;-) )
Fabian O. schrieb: > Außerdem wäre der CTC-Modus des Timers geeigneter. Dann kannst Du Dir > das Laden des Counter-Registers sparen. Ja, danke für den Tipp.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
