Forum: Mikrocontroller und Digitale Elektronik PullUp verzögert?


von Armin A. (10110010)


Lesenswert?

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?

: Bearbeitet durch User
von Wolke (Gast)


Lesenswert?

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.

von Ingo L. (corrtexx)


Lesenswert?

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 ;)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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...

: Bearbeitet durch Moderator
von Armin A. (10110010)


Lesenswert?

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?

von Joachim B. (jar)


Lesenswert?

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

von Ingo L. (corrtexx)


Lesenswert?

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.

von Armin A. (10110010)


Lesenswert?

Hm... ich versteh nur bahnhof.

Tau?
Heist dass, dass diese Zeit variieren kann, wenn ich unterschiedliche 
sachen an dem Port schalte?

von Joachim B. (jar)


Lesenswert?

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?

: Bearbeitet durch User
von Armin A. (10110010)


Lesenswert?

Heist das jetzt, dass ich besser den PullUp Intern meide und meinen 
eigenen Wiederstand nutzen sollte?

von Karl M. (Gast)


Lesenswert?

Zur deutschen Sprache,

den Wiederstand gibt es so nicht.

Bestimmt meinst Du dieses Bauteil:

https://de.wikipedia.org/wiki/Elektrischer_Widerstand

von Ingo L. (corrtexx)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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...

von Ingo L. (corrtexx)


Lesenswert?

Lothar M. schrieb:
> oder ein paar NOPs einfügen
Wäre sauberer als das Pull-up Register zu lesen ;)

von Joachim B. (jar)


Lesenswert?

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

von Ingo L. (corrtexx)


Lesenswert?

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.

von Joachim B. (jar)


Lesenswert?

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.....

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.