Hallo Leute,
ich habe einen Tiny13A dem ich via Knopfdruck einen Ausgang schalten
möchte.
Hier der Code:
1
;-----------------------------------
2
;- Interrupts -
3
;-----------------------------------
4
rjmp RESET ; Reset Handler
5
rjmp PPM ; IRQ0 Handler
6
RETI ; PCINT0 Handler
7
RETI ; Timer0 Overflow Handler
8
RETI ; EEPROM Ready Handler
9
RETI ; Analog Comparator Handler
10
RETI ; Timer0 CompareA Handler
11
RETI ; Timer0 CompareB Handler
12
RETI ; Watchdog Interrupt Handler
13
RETI ; ADC Conversion Handler
14
15
;-----------------------------------
16
;- Reset Interrupts -
17
;-----------------------------------
18
RESET:
19
SBIC EECR,EEPE ; Prüfe Zugriff auf EEPROM
20
RJMP RESET ; Versuh nochmal, wenn nicht bereit
21
LDI R24, 0x00 ; Definiere Adresse
22
OUT EEARL,R24 ; Setze Adresse
23
SBI EECR,EERE ; Definiere Leden
24
IN R16,EEDR ; Lese Adresse in Register
25
CPI R16, 0xFF ; Vergleiche Werte
26
BREQ JumpOsccal
27
OUT OSCCAL, R16 ; Setze Calibrierung
28
RJMP JumpSave
29
30
JumpOsccal:
31
SBIC EECR,EEPE ; Ist EEPROM bereit
32
RJMP JumpOsccal ; Wenn nein, dann wiederholen
33
LDI R24, 0x00 ; Definiere Adresse 0
34
OUT EEARL, R24 ; Setzte Adresse
35
IN R16, OSCCAL
36
OUT EEDR, R16 ; Übergebe Wert
37
SBI EECR,EEMPE ; Aktiviere Schreiben
38
SBI EECR,EEPE ; Schreibe
39
JumpSave:
40
LDI R16, low (RAMEND)
41
OUT SPL, R16 ; Setzt sen StackPointer auf Anfang
42
LDI R16, 0b00011000
43
OUT DDRB, R16 ; Setzt Pin6->Input, Pin2->Output, Pin3->Output
44
LDI R16, 0b00000001
45
OUT PORTB, R16 ; PullUp
46
LDI XH, 0x00
47
LDI XL, 0x00
48
LDI R16, 0b01000000
49
OUT GIMSK, R16 ; Aktiviert Interupt INT0
50
LDI R16, 0b00000011
51
OUT MCUCR, R16 ; Interupt nur bei Steigender Flanke & Sleep erlauben
52
SEI
53
54
;-----------------------------------
55
;- Main-Loop -
56
;-----------------------------------
57
Loop:
58
;IN R20, PORTB
59
;ANDI R20, 0x01
60
;BREQ Loop
61
IN R20, PINB ; Lese Pins in R20
62
ANDI R20, 0b00000001 ; Isoliere PB0
63
BREQ InitialiseCal ; Calibriere
64
CBI PORTB, 0x03
65
CBI PORTB, 0x04
66
rjmp Loop
67
68
;-----------------------------------
69
; Int0 Interrupt (PPM Interpreter) -
70
;-----------------------------------
71
PPM:
72
reti
73
74
;----------------------------------
75
;- Calibrierung -
76
;----------------------------------
77
InitialiseCal:
78
CLI ; Interrupts abschalten
79
80
IN R19, PINB ; Lese Pins
81
SBI PORTB, 0x03
82
CBI PORTB, 0x04
83
SEI
84
rjmp Loop
Wenn ich auf VCC jetzt saft gebe, dann Blizt die LED an PB3 ganz kurz
auf.
Wenn ich in dem Loop die 3 auskommentierten Zeilen wieder aktiviere,
dann hab ich das nicht. Braucht der PullUp ein wenig Zeit, bis der
richtig arbeitet?
Armin A. schrieb:> Wenn ich in dem Loop die 3 auskommentierten Zeilen wieder aktiviere,> dann hab ich das nicht.
Ich verstehe das Problem nicht richtig. Mit den aktiven Zeilen kommt das
Programm gar nicht bis zu den SBIs sondern bleibt in der Loop hängen.
Armin A. schrieb:> Braucht der PullUp ein wenig Zeit, bis der> richtig arbeitet?
Wenn du einen kleinen Entprellkondensator an deinem Pin hast, muss der
erst über den Pullup geladen werden. Folglich kann es sein, dass du
während des ersten Schleifendurchlaufs ein Low liest. Völlig normal,
sucht man sich aber erstmal n Wolf bis man diese Erkenntnis hat ;)
Armin A. schrieb:> Braucht der PullUp ein wenig Zeit, bis der richtig arbeitet?
Eigentlich nicht. Aber was hängt denn da aussen am Pin dran?
Offenbar braucht die Beschaltung die halbe µs der drei auskommentierten
Zeilen für einen sinnvollen Pegel...
An dem pin (PB3) ist lediglich ein vorwiederstand mit einer led.
An PB0 ist ein Druckknopf, der den weg zur Masse durchschaltet.
Habe keine kondensatoren verbaus.
Ist also richtig, dass der PullUp ein wenig braucht die logische 1
sauber zu schalten?
Armin A. schrieb:> Ist also richtig, dass der PullUp ein wenig braucht die logische 1> sauber zu schalten?
???
jedes Kabel, jeder Port hat eine Kapazität.
Jede Quelle einen Innenwiderstand.
Daraus ergibt sich Tau = R * C
soll Tau kleiner werden veringere R oder C
Armin A. schrieb:> Ist also richtig, dass der PullUp ein wenig braucht die logische 1> sauber zu schalten?
Geh ruhig mal von einer kleinen parasitären Kapazität aus, sagen wir mal
10pF, dann wäre es mit einem 35k Pullup 1,75us bis der Pegel sauber
steht. Das sind je nach Taktfrequenz durchaus mehrere Takte.
Armin A. schrieb:> Hm... ich versteh nur bahnhof.
OK dann sollte man besser nichts an Ports anschalten,
Armin A. schrieb:> wenn ich unterschiedliche> sachen an dem Port schalte?Armin A. schrieb:> Tau?> Heist dass, dass diese Zeit variieren kann
klar variiert sie, woher sonst kommen die schönen Errungenschaften wie
Schallgeschwindigkeit in verschiedenen Medien oder Laufzeiten im Kabel.
Warum gibt es HF oder NF Filter, wie funktioniert ein EQ.
Was ist Frequenz?
Was ist Frequenzabhängigkeit?
Armin A. schrieb:> Heist das jetzt, dass ich besser den PullUp Intern meide und meinen> eigenen Wiederstand nutzen sollte?
Es heißt das du damit Leben musst das es eine kurze Verzögerung gibt.
Also kurzes Päus'chen vom wenigen µs einlegen bevor du den Pin erstmalig
abfragst.
Ingo L. schrieb:> Also kurzes Päus'chen vom wenigen µs einlegen
Also entweder die paar wirkungslosen aber zeitverbrauchenden Zeilen
wieder "einkommentieren" oder ein paar NOPs einfügen oder vor der ersten
Taterabfrage noch was Anderes machen...
Armin A. schrieb:> Heist das jetzt, dass ich besser den PullUp Intern meide und meinen> eigenen
ich bevorzuge ja passende echte eigene externe pullup Widerstände.
1. kann ich die Zeiten und Ströme bestimmen
2. kann der nicht "aus Versehen" von Software abgeschaltet werden.
3. begrenzt der die Ströme nach Bedarf
Joachim B. schrieb:> 1. kann ich die Zeiten und Ströme bestimmen
Vom Anwendungsfall abhängig. Für einen Taster genügt der interne, für
einen Incrementalgaber nehme ich auch externe
> 2. kann der nicht "aus Versehen" von Software abgeschaltet werden.
Solange man sich nicht im Weltraum befindet sollte "aus Versehen"
sowieso nichts abschalten ;)
Joachim B. schrieb:> 3. begrenzt der die Ströme nach Bedarf
nochmal 1?
Wenn du Stückzahlen produzierst und es auch jeden 0,1Ct ankommt freut
man sich über interne Pull-ups, im Bastellkeller spielt sowas meist nur
layouttechnisch eine Geige.
Ingo L. schrieb:> Joachim B. schrieb:>> 1. kann ich die Zeiten und Ströme bestimmen> Vom Anwendungsfall abhängig.
klar und mit langen Leitungen ist manchmal mehr Strom uder weniger R
nötig.
>> 2. kann der nicht "aus Versehen" von Software abgeschaltet werden.> Solange man sich nicht im Weltraum befindet sollte "aus Versehen"> sowieso nichts abschalten ;)
Es gibt hier jede Menge Hobbyprogger die schon mal den internen pullup
vergessen bei C&P oder der "aus Versehen" wegoptimieren.
> Wenn du Stückzahlen produzierst und es auch jeden 0,1Ct ankommt freut> man sich über interne Pull-ups, im Bastellkeller spielt sowas meist nur> layouttechnisch eine Geige.
Ich habe kein Verständnis wenn bei 1000,-€ und mehr geknausert wird,
mein smartTV hat zu wenig RAM mediathek schauen geht nicht.
Auch hochpreisige Geräte sind vor unschöner Knauserei nicht geschützt,
schlecht für den Kunden gut für die Boni.....