Ontwikkelaar van de Heatpump Listener en Itho Daalderop warmtepomp control module
wat je nu ziet zijn de enen die voorbij schuiven.
uitleg
ik heb een kamer met acht deuren. door elke deur kan je binnen komen. als de deuren allemaal open staan kan ik iemand langs zien lopen. als alle deuren dicht zijn kan niemand zien langs lopen. met "output enable" doe je zeg maar alle deuren tegelijk open of dicht
elektrotechniek is leuk (nog wel). ik ga dus weer verder met leuke dingen ontwerpen. amd 2200+ 256mb 333mhz,gf4 440mx, 120gb,16X dvd. jarr-url
Dit heb ik geprobeerd en nog steeds blijven de LEDs knipperen. Ik heb geprobeerd de output enable te doen rondom de regels dat ik de latch hoog en laag maak én rondom de gehele PWM code. Helaas werkt het in beide gevallen niet.virus.elektro schreef op zondag 20 januari 2008 @ 14:29:
ik heb even data sheet van de chip er bij gepakt. op de chip zit een "output enable" ingang als je deze hoog maakt als je gaat schuiven zou het weg moeten zijn.
Als ik de output enable hoog maak en niet meer laag, dan blijven (zoals verwacht) alle LEDs uit.
Ik heb de code van mijn programma bij dit bericht gezet, misschien dat ik echt over iets heel stoms heenkijk, maar ik zie het niet meer
Op bit 0 van PORTB zit de data
Op bit 1 van PORTB zit de clock
Op bit 2 van PORTB zit de latch
Op bit 3 van PORTB zit de output enable
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
| ; Assign your microcontroller
LIST P=16F628A
include <P16F628A.INC>
; Predefine your configuration Word
;__CONFIG Configuration Word
;_CP_OFF Code Protection
;_DATA_CP_OFF EEPROM Code Protection
;_BODEN_OFF Under Voltage Reset
;_MCLRE_ON Master Clear Enable(Reset)
;_PWRTE_ON Powerup Timer
;_WDT_OFF WatchDog Timer
;_INTRC_OSC_NOCLKOUT Internal RC oscilator(pins RA6/RA7 can be used voor I/O)
;_LVP_OFF Low Voltage Programming
__CONFIG _CP_OFF & _DATA_CP_OFF & _BODEN_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _LVP_OFF
; Disable warning : Register in operand not in bank 0
ERRORLEVEL -302
cblock 0x20
LED1
LED2
LED3
LED4
LED5
LED6
LED7
LED8
TELLER
endc
org 0x00
goto INIT
org 0x04
ISR
incf TELLER, F ; Hoog teller op
;Regel LED 1 (7 cycles)
movfw TELLER
subwf LED1, W
btfsc STATUS, C
bsf PORTB, 0 ; DATA hoog
bsf PORTB, 1 ; CLOCK hoog
bcf PORTB, 1 ; CLOCK laag
bcf PORTB, 0 ; DATA laag
;Regel LED 2 (7 cycles)
movfw TELLER
subwf LED2, W
btfsc STATUS, C
bsf PORTB, 0 ; DATA hoog
bsf PORTB, 1 ; CLOCK hoog
bcf PORTB, 1 ; CLOCK laag
bcf PORTB, 0 ; DATA laag
;Regel LED 3 (7 cycles)
movfw TELLER
subwf LED3, W
btfsc STATUS, C
bsf PORTB, 0 ; DATA hoog
bsf PORTB, 1 ; CLOCK hoog
bcf PORTB, 1 ; CLOCK laag
bcf PORTB, 0 ; DATA laag
;Regel LED 4 (7 cycles)
movfw TELLER
subwf LED4, W
btfsc STATUS, C
bsf PORTB, 0 ; DATA hoog
bsf PORTB, 1 ; CLOCK hoog
bcf PORTB, 1 ; CLOCK laag
bcf PORTB, 0 ; DATA laag
;Regel LED 5 (7 cycles)
movfw TELLER
subwf LED5, W
btfsc STATUS, C
bsf PORTB, 0 ; DATA hoog
bsf PORTB, 1 ; CLOCK hoog
bcf PORTB, 1 ; CLOCK laag
bcf PORTB, 0 ; DATA laag
;Regel LED 6 (7 cycles)
movfw TELLER
subwf LED6, W
btfsc STATUS, C
bsf PORTB, 0 ; DATA hoog
bsf PORTB, 1 ; CLOCK hoog
bcf PORTB, 1 ; CLOCK laag
bcf PORTB, 0 ; DATA laag
;Regel LED 7 (7 cycles)
movfw TELLER
subwf LED7, W
btfsc STATUS, C
bsf PORTB, 0 ; DATA hoog
bsf PORTB, 1 ; CLOCK hoog
bcf PORTB, 1 ; CLOCK laag
bcf PORTB, 0 ; DATA laag
;Regel LED 8 (7 cycles)
movfw TELLER
subwf LED8, W
btfsc STATUS, C
bsf PORTB, 0 ; DATA hoog
bsf PORTB, 1 ; CLOCK hoog
bcf PORTB, 1 ; CLOCK laag
bcf PORTB, 0 ; DATA laag
bsf PORTB, 3 ; OUTPUT ENABLE hoog
bsf PORTB, 2 ; LATCH hoog
bcf PORTB, 2 ; LATCH laag
bcf PORTB, 3 ; OUTPUT ENABLE laag
bcf INTCON, T0IF
retfie
INIT
BANKSEL TRISB
movlw b'00000000'
movwf TRISB ; PORTB allemaal uitgangen
BANKSEL CMCON
movlw b'00000111'
movwf CMCON ; comparators uit
clrf PORTB ; PORTB allemaal laag
movlw d'0' ; Alle LEDS instellen
movwf LED1
movwf LED2
movwf LED3
movwf LED4
movwf LED5
movwf LED7
movwf LED8
movlw d'255'
movwf LED6
;movlw d'128'
;movwf LED6
clrf PORTB ; PORTB laag
clrf TELLER ; Zet teller op 0
clrf TMR0 ; Zet timer teller op 0
BANKSEL OPTION_REG ; Enable de interrupts
movlw b'00000000'
movwf OPTION_REG
bsf INTCON, GIE
bsf INTCON, T0IE
bcf OPTION_REG, T0CS
BANKSEL TMR0
MAIN
goto MAIN ; Oneindige loop
end |
Mijn excuses voor deze lap code
Ontwikkelaar van de Heatpump Listener en Itho Daalderop warmtepomp control module
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| movlw b'00001000' ;welke leds moeten er aan?
call schuifregister1
;-------------------------------------------------------------
schuifregister1
movwf Var1 ; zet de waarde vanuit w in Var1. dit is het getal wat geklokt moet worden
movlw D'8' ;zet de waarde 8 in het werkregister
movwf bits1 ;sla de waarde 8 uit w op in bits1 dis is het aantal bits wat ingeklokt moet worden
loop1
rlf Var1,1 ;rotate left trough carry en sla het resultaat op in Var1. Eerste bit zit nu in de carry
btfss STATUS, C ; lees de carry uit. Is carry= 1?
bcf data1 ;zo nee, zet de datalijn naar 0
btfsc STATUS, C ; is carry 0?
bsf data1 ;zo nee data is 1
bsf klok1
nop
bcf klok1 ;bitje is nu ingeklokt
decfsz bits1,f ;verlaag bits1 met één totdat die nul is
goto loop1 ; is bits1 0? dan "return" zo nee ga naar loop1
return |
Zie hier voor meer info: [HOWTO] LED kubus 5*5*5 met 74HC595
[ Voor 3% gewijzigd door _ferry_ op 20-01-2008 16:59 ]
Verwijderd
Ik heb ook verschillende projectjes gedaan met een HC595. Volgens mij wordt dit probleem niet veroorzaakt door de "output enable" pin. de HC595 bevat een shift register en een storage register. Met de storage puls (pin 12) wordt het schift register ingeklokt in het storage register. Indien de OE pin laag is zie je data van het storage register direct op de uitgangen, indien deze hoog is dus niet. Maar de data ingeklokte data wordt dus in ieder geval pas zichtbaar op de uitgang nadat een storage puls is gegeven. De data in de vorm van 1 en 0 zie je dus niet voorbij komen tijdens het inklokken op de uitgangen ook al heb je OE gewoon laag staan. tenzij je na elk bitje wat je ingeklokt hebt ook een strorage puls geeft, maar dit is volgens mij niet het geval gezien de code die gepost is ( ook al gebruik ik zelf nooit asm). Het probleem wordt dus waarschijnlijk ergens anders door veroorzaakt. Ik heb zelf een keer problemen gehad toen de MR niet goed bleek aangesloten op de 5 volt. dus dan wordt ie elke keer gereset. En een keer had ik een slecht GND contact toen ging het ook half mis. Check dus even of je deze 2 pinnen goed hebt aangesloten lijkt me. Zelf knoop ik de MR pin altijd direct aan de 5 volt.virus.elektro schreef op zondag 20 januari 2008 @ 14:29:
ik heb even data sheet van de chip er bij gepakt. op de chip zit een "output enable" ingang als je deze hoog maakt als je gaat schuiven zou het weg moeten zijn.
wat je nu ziet zijn de enen die voorbij schuiven.
uitleg
ik heb een kamer met acht deuren. door elke deur kan je binnen komen. als de deuren allemaal open staan kan ik iemand langs zien lopen. als alle deuren dicht zijn kan niemand zien langs lopen. met "output enable" doe je zeg maar alle deuren tegelijk open of dicht
[ Voor 9% gewijzigd door Verwijderd op 20-01-2008 17:27 ]
Je zit wel hoogfrequent datasignalen in te sturen.
Speel ook Balls Connect en Repeat
Ik heb gekozen voor deze lap code om met behulp van de bytes LED1 t/m LED8 in 256 stappen de LEDs te kunnen regelen. Ik kan het fout hebben (ik programmeer nog niet zo lang is assembly_ferry_ schreef op zondag 20 januari 2008 @ 16:58:
eerst maar eens beginnen om daaar iets korters voor te nemen?
Zie hier voor meer info: [HOWTO] LED kubus 5*5*5 met 74HC595
Dit heb ik gehad toen ik de LEDs statisch aanstuurde (eenmaal alle bits inklokken en weergeven) en dit heb ik toen ook verholpen. Nu hangt de MR aan de +5 en de GND hangt aan de ground.Verwijderd schreef op zondag 20 januari 2008 @ 17:22:
Ik heb zelf een keer problemen gehad toen de MR niet goed bleek aangesloten op de 5 volt. dus dan wordt ie elke keer gereset. En een keer had ik een slecht GND contact toen ging het ook half mis. Check dus even of je deze 2 pinnen goed hebt aangesloten lijkt me. Zelf knoop ik de MR pin altijd direct aan de 5 volt.
Dit had ik eerst niet, maar deze heb ik nu toegevoegd. Ik heb een condensator van 100nF over de Vcc en GND van de HC595 geknoopt, helaas helpt dit niets.Onbekend schreef op zondag 20 januari 2008 @ 17:25:
Je hebt toch wel de chip goed ontkoppeld met 100nF?
Je zit wel hoogfrequent datasignalen in te sturen.
Ik heb de prescaler van de timer een factor 4 groter gemaakt en de leds knipperen nu ook met een factor vier langzamer... Het moet dus echt in die code zitten die tijdens het timerinterrupt wordt uitgevoerd. Als ik het hele interrupt uitschakel en in de main loop de latch hoog maak en niet meer laag gaan de leds niet branden.
Ontwikkelaar van de Heatpump Listener en Itho Daalderop warmtepomp control module
; Disable warning : Register in operand not in bank 0
En heb je al geprobeerd om handmatig (dus langzaam) data in het schuifregister te klokken?
[ Voor 13% gewijzigd door Onbekend op 21-01-2008 08:05 ]
Speel ook Balls Connect en Repeat
Het enige dat dit doet is compiler waarschuwingen verbergen, ik zal als ik thuis ben eens kijken wat er gebeurd als ik deze regel weghaal. Kan het me niet voorstellen, maar misschien zit ergens naar de verkeerde bank te schrijven...Onbekend schreef op maandag 21 januari 2008 @ 08:05:
Zelf ben ik even eruit met het PIC programmeren, maar zou er hier iets in kunnen zitten?
; Disable warning : Register in operand not in bank 0
Ik heb een keer 8 bits ingeklokt en op de output gezet. Dit ging goed. Zoals ik al aangaf lijkt het erop dat de LED alleen gaat branden op het moment dat ik de latch puls geef.En heb je al geprobeerd om handmatig (dus langzaam) data in het schuifregister te klokken?
Ik begin eerder te twijfelen aan het schuifregister zelf, dat dat misschien kapot is of zo...
Ontwikkelaar van de Heatpump Listener en Itho Daalderop warmtepomp control module
Ik heb heel erg sterk het gevoel dat er een fout in mijn assembly code zit: in LED1 hou ik de gewenste waarde bij. Ik laat een tellertje lopen en ik trek de waarde van de teller af van de gewenste waarde. Als deze uitkomst negatief is wordt de led hoog, anders laag.
Op het moment dat de teller overflowed naar 0 gaat het natuurlijk fout: gewenste waarde (0) - teller waarde (0) gaat uiteraard niet negatief en daardoor wordt de uitgang hoog gemaakt...
Vanavond toch maar eens kijken hoe ik dit beter kan oplossen. In elk geval bedankt voor de hulp!
Ontwikkelaar van de Heatpump Listener en Itho Daalderop warmtepomp control module
Heb je al de waarschuwing uitgezocht/opgelost? Je lees/schijft namelijk in de verkeerde geheugenbank en daardoor kan je vreemde waardes krijgen.leejoow schreef op maandag 21 januari 2008 @ 12:09:
[...]
Het enige dat dit doet is compiler waarschuwingen verbergen, ik zal als ik thuis ben eens kijken wat er gebeurd als ik deze regel weghaal. Kan het me niet voorstellen, maar misschien zit ergens naar de verkeerde bank te schrijven...
Speel ook Balls Connect en Repeat
Ik schrijf in de goede geheugenbankenOnbekend schreef op dinsdag 22 januari 2008 @ 07:58:
[...]
Heb je al de waarschuwing uitgezocht/opgelost? Je lees/schijft namelijk in de verkeerde geheugenbank en daardoor kan je vreemde waardes krijgen.
Ontwikkelaar van de Heatpump Listener en Itho Daalderop warmtepomp control module