Programování PIC18F97J94 – Assembler – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Programování PIC18F97J94 – Assembler – Fórum – Programujte.comProgramování PIC18F97J94 – Assembler – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Aleszpasek
~ Anonymní uživatel
18 příspěvků
20. 6. 2016   #1
-
0
-

Ahoj, můj PIC18F97J94 mi nějak špatně pracuje a vážně nemůžu v datasheetu najít chyby, které jsem udělal. Takže k věci... 
Přes tranzistory (mosfet) rozsvěcím LED diody (spínám oba vývody). Nějak občas svítí a občas ne vývod 96 (PORTG,7) připojen na tranzistor TSM3401cx (spínání log. 0) přes 1kOHM paralelně se 150pF.

Dále nelze rozsvítit:
PORTC,0 (vývod 45) , ale rozsvítí se spolu s  PORTK,0
PORTC,1 (44) , ale zhasíná po zapnutí napájení
PORTF,3 (22) , ale rozsvítí se spolu s PORTL,4 (21)
PORTF,4 (20) , ale rozsvítí se spolu s PORTL,4 (21)
PORTH,2 (1) ,  ale rozsvítí se spolu s PORTH,1 (100) nebo PORTH,3 (2)
PORTL,2 (13) 

Tyto porty spínají tranzistory BSS138 (spínání log. 1) napojeny přímo.

Vidí v tom někdo nějakou souvislost? byl bych rád alespoň za nějaké. Ještě dodám, že programátor je PICKIT3. Předem díky všem co by mi chtěli poradit. 

Facebbok: https://www.facebook.com/ales.jerie

Nahlásit jako SPAM
IP: 109.81.210.–
Reklama
Reklama
KIIV+42
God of flame
21. 6. 2016   #2
-
0
-

Kod by nebyl? Mozna je to spise chyba programu.

Nahlásit jako SPAM
IP: 212.47.3.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Aleszpasek
~ Anonymní uživatel
18 příspěvků
21. 6. 2016   #3
-
0
-

#2 KIIV
Předpokládám že to je chyba programu, hlavně nějakého nastavení :) Právě proto jsem to uvedl přesně, jestli by mi někdo neporadil co mají ty vývody společného. Jsem v podstatě začátečník, takže přijímám jakékoliv rady na zlepšení programu... Po tomto následuje už spínání. Používám vnitřní oscilátor 8MHz a nepoužívám přerušení. Prvním kamenem úrazu bylo, že není template.

 

    list        p=18f97j94    ; list directive to define processor
#include    <p18f97j94.inc>    ; processor specific variable definitions
    
    CONFIG        XINST = OFF, STVREN = OFF, CP0 = OFF, BOREN = OFF, IESO = OFF, CLKOEN = OFF, SOSCSEL = DIG, FOSC = FRC, EASHFT = OFF, IOL1WAY = OFF, WDTEN = OFF, DSBITEN = OFF, RETEN = ON
    
;***** VARIABLE DEFINITIONS
w_temp        EQU    0x7D        ; variable used for context saving 
status_temp    EQU    0x7E        ; variable used for context saving
pclath_temp    EQU    0x7F        ; variable used for context saving            
delay        EQU    0xD80
delay2        EQU    0xD81        
        
        
        
;**********************************************************************
    ORG     0x000             ; processor reset vector

    nop              ; nop required for icd
      goto    nastaveni              ; go to beginning of program


    ORG     0x008             ; interrupt vector location

    movwf   w_temp            ; save off current W register contents
    movf    STATUS,w          ; move status register into W register
    movwf    status_temp       ; save off contents of STATUS register
    movf    PCLATH,w      ; move pclath register into w register
    movwf    pclath_temp      ; save off contents of PCLATH register

; isr code can go here or be located as a call subroutine elsewhere

    movf    pclath_temp,w      ; retrieve copy of PCLATH register
    movwf    PCLATH          ; restore pre-isr PCLATH register contents
    movf    status_temp,w     ; retrieve copy of STATUS register
    movwf    STATUS            ; restore pre-isr STATUS register contents
    swapf   w_temp,f
    swapf   w_temp,w          ; restore pre-isr W register contents
    retfie                    ; return from interrupt

nastaveni
    
;**********************NASTAVENI PORTU*************************************
    
;NASTAVENI PORTA + analog vstupy a A/D prevodnik
    BANKSEL        ANCON1        ;banka E
    clrf        ANCON1        ;vypnuti analogovych vstupu RA012345, RF2, RG0
    clrf        ANCON2        ;vypnuti analogovych vstupu RC2, RF567, RG1234
    clrf        ANCON3        ;vypnuti analogovych vstupu RH01234567
    BANKSEL        PORTA        ;banka F
    bcf        ADCON1H, ADON    ;vypnuti A/D prevodniku
    
    clrf        PORTA        ;nulováni portu A
    clrf        TRISA        ;PORTA nastaven jako vystupni
;NASTAVENI PORTB
    clrf        PORTB        ;nulovani portu B
    clrf        TRISB        ;PORTB vystupni
;NASTAVENI PORTC
    clrf        PORTC        ;nulovani portu C
    clrf        TRISC        ;PORTC vystupni
;NASTAVENI PORTD
    clrf        PORTD        ;nulovani portu D
    clrf        PORTD        ;PORTD vystupni
;NASTAVENI PORTE
    clrf        PORTE        ;nulovani portu E
    clrf        TRISE        ;PORTE vystupni
;NASTAVENI PORTF
    clrf        PORTF        ;nulovani portu F
    clrf        TRISF        ;PORTF vystupni
;NASTAVENI PORTG
    clrf        PORTG        ;nulovani portu G
    bcf        CM1CON,CON        ;vypnuti komparatoru
    clrf        TRISG        ;PORTG vystupni
;NASTAVENI PORTH
    clrf        PORTH        ;nulovani portu H
    clrf        TRISH        ;PORTH vystupni    
;NASTAVENI PORTJ
    clrf        PORTJ        ;nulovani portu J
    clrf        TRISJ        ;PORTJ vystupni
;NASTAVENI PORTK
    BANKSEL        PORTK        ;banka E
    clrf        PORTK        ;nulovani portu K
    clrf        TRISK        ;PORTK vystupni
;NASTAVENI PORTL
    clrf        PORTL        ;nulovani portu L
    clrf        TRISL        ;PORTL vystupni
    
;ZHASNUTI VRSTEV
    BANKSEL        PORTA        ;banka F
    bsf        PORTE,7        ;vypnuti vsrtev
    bsf        PORTE,6        ;vypnuti vsrtev
    bsf        PORTE,5        ;vypnuti vsrtev
    bsf        PORTE,4        ;vypnuti vsrtev
    bsf        PORTG,7        ;vypnuti vsrtev

;*****************OSTATNI NASTAVENI**************************************
    
    BANKSEL        OSCCON3        ;banka F
    clrf        OSCCON3        ;zruseni deleni frekvence oscilatoru
    BANKSEL        REFO1CON1        ;banka E
    movlw        0x03
    movwf        REFO1CON1        ;nastaveni oscilatoru
    movwf        REFO2CON1        ;nastaveni oscilatoru
    movlw        0xFF
    movwf        PMD0        ;vypnuti periferii ccp
    movwf        PMD1        ;vypnuti periferii usart ssp
    clrf        PMD2        ;zapnuti periferii timer
    movlw        0xFF
    movwf        PMD3        ;vypnuti periferii lcd refo psp, str 83
    movwf        PMD4        ;vypnuti periferii usb cmp 
    BANKSEL        RCON        ;banka F
    bcf        RCON, IPEN        ;priority interrupt disable
    BANKSEL        MEMCON        ;banka E
    bsf        MEMCON, EBDIS    ;nastaveni externi sbernice
    clrf        TRISD
;USB
    bcf        UCON, USBEN        ;vypnuti USB
    BANKSEL        USTAT
    clrf        USTAT
    BANKSEL        UCFG
    clrf        UCFG
    bsf        UCFG,UTRDIS
;PRERUSENI
    BANKSEL        INTCON        ;banka F
    clrf        INTCON        ;vypnuti preruseni
;PORTY
    clrf        PADCFG1        ;vypnuti pull-up
    BANKSEL        ODCON1        ;banka E
    clrf        ODCON1        ;vypnuti open drain
    clrf        ODCON2        ;vypnuti open drain
;LCD    
    bcf        LCDCON, 7        ;vypnuti LCD
    
;real time and clock
    BANKSEL        RTCCON1        ;banka F
    bcf        RTCCON1, RTCEN    ;vypnuti casu a data
    bcf        ALRMCFG, ALRMEN    ;vypnuti alarmu
;komparator
    bcf        CM1CON, CON        ;vypnuti comparatoru
    bcf        CM2CON, CON        ;vypnuti comparatoru
    bcf        CM3CON, CON        ;vypnuti comparatoru
;pripadne pokracuj od strany 525    
    
;******* TIMER na str 281-295 **********************************    
    clrf        T0CON        ;vypnuti TIMER 0
    movlw        0x01
    movwf        T1CON        ;vypnuti citani vsech timeru
    movwf        T3CON
    movwf        T5CON
    movlw        0x04
    movwf        T2CON
    movwf        T4CON
    movwf        T6CON
    movwf        T8CON
    
;******DELAYS**************
    clrf        delay
    clrf        delay2


    clrf        TRISF            ;znovu nastaven kvuli sbernici
    clrf        PORTF

Nahlásit jako SPAM
IP: 109.81.210.–
KIIV+42
God of flame
21. 6. 2016   #4
-
0
-

Tezko rici. Co se stane, po dokonceni nastaveni? Projedes zbytek pameti programu a pak jako by se to dostalo do faze resetu, kdyz to prejde zase na 0x0000? (neni tam zadny nekonecny cyklus hlavniho programu)

Delay jsou tam zatim asi taky jen na okrasu ne? Respektive nevidim zadne vyuziti v ramci jejich vynulovani tesne na konci.

Nahlásit jako SPAM
IP: 212.47.3.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Aleszpasek
~ Anonymní uživatel
18 příspěvků
21. 6. 2016   #5
-
0
-

#4 KIIV
No jasně pak už to tam mam nějak takhle, takže se delay využije a program se dostane do smyčky (to že to nebliká teď uplně přesně mi je jedno)

program

bcf        PORTE,7        ;spodni vrstva 5
    bcf        PORTE,6
    bcf        PORTE,5        
    bcf        PORTE,4
    bcf        PORTG,7

bsf        PORTG,4
    call        delay_500ms
    bcf        PORTH,2
    bcf        PORTG,4
    call        delay_500ms

goto          program

delay_100ms
    BANKSEL        delay
    incfsz        delay,f
    goto        delay_100ms
    incfsz        delay2,f
    goto        delay_100ms
    BANKSEL        PORTA
    return
    
delay_500ms    
    call        delay_100ms
    call        delay_100ms
    call        delay_100ms
    call        delay_100ms
    call        delay_100ms
    return

Nahlásit jako SPAM
IP: 109.81.210.–
Aleszpasek0
Newbie
23. 7. 2016   #6
-
0
-

Ahoj, to mi nikdo nedokáže nějak poradit čím by to mohlo být? :) Nebo jsem to snad napsal do špatného vlákna?

Nahlásit jako SPAM
IP: 109.81.210.–
hlucheucho+10
Posthunter
25. 7. 2016   #7
-
0
-

Co nechodí? Program běží ve smyčce, bliká to...

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Aleszpasek0
Newbie
25. 7. 2016   #8
-
0
-

ano bliká to skoro dobře...

nelze rozsvítit:
PORTC,0 (vývod 45) , ale rozsvítí se spolu s  PORTK,0
PORTC,1 (44) , ale zhasíná po zapnutí napájení
PORTF,3 (22) , ale rozsvítí se spolu s PORTL,4 (21)
PORTF,4 (20) , ale rozsvítí se spolu s PORTL,4 (21)
PORTH,2 (1) ,  ale rozsvítí se spolu s PORTH,1 (100) nebo PORTH,3 (2)
PORTL,2 (13) 

Nahlásit jako SPAM
IP: 109.81.210.–
hlucheucho+10
Posthunter
25. 7. 2016   #9
-
0
-

Schéma řekne víc než sebepodrobnější popis.

Jestliže se rozsvítí ty LED, které jsou zapojeny na sousedící vývody, je možná zkrat mezi vývody. Po pájení doporočuji používat optickou kontrolu pod lupou nebo mikroskopem. Dále je dobré provést kontrolu ohmmetrem a nakonec test: zapsat na porty takovou kombinaci jedniček a nul aby byly "na střídačku". Pokud HW funguje jak má, veškeré další chyby jsou v SW.

PORTC,1 (44) , ale zhasíná po zapnutí napájení

... takže při vypnutém napájení svítí a po zapnutí zhasne? To by mne zajímalo, kde bere energii na svícení.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Aleszpasek0
Newbie
25. 7. 2016   #10
-
0
-

#9 hlucheucho
Zkrat mezi vývody není, kontrola proběhla mikroskopem. Ohmetrem sem to neměřil, ale myslím že kdyby to bylo zkratované tak by se to chovalo jinak...
například: PORTF,3 (22) , ale rozsvítí se spolu s PORTL,4 (21) → v tomto případě se dioda na PORTF, 3 (vývod 22) rozsvítí správně jak má, ale s ní se rozsvítí PORTL,4 (21) a pokud to udělám obráceně (nulu na PORTF,3 a jedničku na PORTL,4, tak nesvítí nic, kdyby to bylo zkratované tak to přeci svítí v obou případech.

Ohledně PORTC,1: Popořadě... Zapnu napájení, rozsvítí se a postupně zhasíná ;) není to zas tak chytrý aby to svítilo bez napájení :D (nejbližší kondenzátor je přes 4 nebo 5 cest které fungují v pohodě :)

Nahlásit jako SPAM
IP: 109.81.210.–
hlucheucho+10
Posthunter
26. 7. 2016   #11
-
0
-

jak jsem psal. Schéma řekne víc

hu

Nahlásit jako SPAM
IP: 195.178.67.–
peter
~ Anonymní uživatel
2547 příspěvků
26. 7. 2016   #12
-
0
-

"Ohmetrem sem to neměřil"
Mikroskop je krasna vec, ale merak je lepsi :)
Ale mozna je jiny problem v zapojeni, treba zbytkovy proud nebo indukovani z pritomnosti cizi soucastky.

Kdyz jsme si my hrali s diodami ve skole, slo o diodove pole, kde v jedne promenne byl ulozen binarni kod, ktere diody maji sviti s v druhe bylo cislo radku. Bylo k tomu treba dodelat casovac, ktery cetl misto z pameti a rychle prepinal cele pole a zobrazoval data. Kdyz jsme chteli pak udelat putujici text, tak se prepisovala jen data na tom miste pameti.
1. se udelal reset nastaveni a celeho systemu
2. pak se vynulovala promena pro zobrazovani
3. Nastavil se cas pro casovac, ktery mel stridat rady a druhy, ktery resil rychlost opakovani celeho kodu
4. Pak se spustili oba casovace, kde ten druhy navic spoustel funkci, ktera mu prekreslovapa ono misto v pameti.
Chci jen rici, ze mi prijde ten tvuj kod cely slozity.

A
o o o o o o B
o o o o o o 
o o o o o o 
o o o o o o 
o o o o o oo o o o o o
o o o o o o 

Nastavilo se do B treba binarne 00100110. Pak se aktivovalo, ze sviti rada A=0. Ze bude svitit 10ms. Pak se zmeni B a prepne A=1 a zas 10ms sviti tato rada. Atd... A pak se to cele opakuje od A=0 treba 5x.
Vyuziva se toho, ze ledka nejakou dobu zhasina (reakcni doba, setrvacnost), takze, kdyz se to zopakuje 5x, tak se bude jevit, ze trvale sviti na dioda treba pismenko A. Kdezto, kdyby ledka reagovala hned, tak uzivatel uvidi jen preblikavat diody a zadne A. Muselo by se to resit pak jinak, vic slozite.

Nahlásit jako SPAM
IP: 2001:718:2601:26c:5017:81...–
hlucheucho+10
Posthunter
26. 7. 2016   #13
-
0
-

LED zhasne velice rychle. Využívá se setrvačnost oka podobně jako u filmu. 25 snímků za sekundu už nevnímáš jako jednotlivé snímky. Podobně u multiplexovaného LED displeje, každá cifra svítí jen krátkou dobu, přesto to vypadá jako trvale svítící. Dalším využitím této vlastnosti oka je řízení jasu LED pomocí PWM.

Jinak vzájemné ovlivňování výstupů může být i zkraty až na "kolektorech" spínacích tranzistorů. Pokud se LED rozsvítí a zvolna zháší, může to být tím, že G u MOSFETu "visí v luftě". Stejně tak se mohou ovlivňovat sousední signály v případě, že port MCU je "otevřený kolektor" a na něm je pověšený MOSFET. Příčinou je nevhodná hodnota nebo absence pull-up nebo pull-down rezistoru. Proto mne zajímalo schéma, spolu s vlastnostmi portu MCU bych měl bližší představu o příčině. Takto mám jen domněnky.

Pro blikání LED na portu v podstatě stačí nastavit port jako výstup a jeho počáteční stav, nastavit časovač na definovanou časovou jednotku a po uplynutí požadovaného násobku časové jednotky negovat bit portu. K negaci bitu portu se hodí XOR. Některé časovače MCU umí i dlouhé intervaly (někdy i přes 1 s), takový ale nemá každý MCU.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
hlucheucho+10
Posthunter
26. 7. 2016   #14
-
0
-

PIC18F97J94 je 100-pinový a podle datasheetu str 197 jsou PORTL a PORTK u něj nedostupné. Kromě toho přímo budit LED mohou PORTB a PORTC, bez tranzistorů. Doporučuji nejdříve nastudovat datasheet a HW upravit tak, aby byl MCU použit v souladu se specifikací výrobce.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Aleszpasek0
Newbie
26. 7. 2016   #15
-
0
-

   

Připojen obrázek.

Připojen obrázek.

Druhý obrázek je pro představu, abychom věděli o čem mluvíme. Přeměřeno ohmetrem. Otevřený kolektor to není, protože open drain jsem v programu vypnul. Ty pull-upy by mohly být problém s těmi nemám zkušenosti, případně tam jdou programem přidat. Stačí mi abych to dokázal aspoň staticky rozsvítit, pak už si to dokážu rozblikat.

Ano koukal sem na stranu 197 a máš pravdu píšou to tam, ale proč by jinak tyto porty byly? Podle mě tam mají chybu a má tam být 1) not avaible on 64-pin. 2) not avaible on 64-pin or 80-pin. Odkazuji na stranu 27, kde začíná tabulka s těmito porty a čísly vývodů, ale poznámka na stranách 219 a 220 je lepší. Všechny porty spínají tranzistory... Obávám se, že to nikam nevede, ale i přes to děkuji :)

Nahlásit jako SPAM
IP: 109.81.210.–
Kit+11
Guru
26. 7. 2016   #16
-
0
-

#15 Aleszpasek
Tak tohle máš zapojené hodně divně. Nemůžeš zapojit bázi tranzistoru přímo na výstup MCU. To si můžeš dovolit s mosfetem, ale s bipolárním tranzistorem ani náhodou.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Aleszpasek0
Newbie
26. 7. 2016   #17
-
0
-

#16 Kit
Podle čísla a už z prvního příspěvku by si zjistil že to je MOSFET a ano uznávám že je špatně schématická značka. Tato značka je lehčí a snažší na pochopení

Nahlásit jako SPAM
IP: 109.81.210.–
Kit+11
Guru
27. 7. 2016   #18
-
0
-

#17 Aleszpasek
Ano, pochopil jsem to hned, když jsem se kouknul na datasheet. Jenže ta značka je špatně a takhle se schémata prostě nekreslí. Nebo je snad jedno jestli v daném místě nakreslím odpor či kondenzátor? Vždyť obojí jsou válečky se dvěma vývody.

Kromě toho je ten horní tranzistor nakreslený obráceně.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Aleszpasek0
Newbie
27. 7. 2016   #19
-
0
-

Toto téma se nezabývá kreslením schémat. Je to kresleno večer, po práci, na rychlo... Myslím že se to dá pochopit. Nicméně Ti nebráním v překreslení přesně jak se to má kreslit. :)

Nahlásit jako SPAM
IP: 109.81.210.–
Kit+11
Guru
27. 7. 2016   #20
-
0
-

#19 Aleszpasek
Všimni si té mé poslední věty. Pokud máš ten tranzistor zapojený takhle, nemůže ti to správně fungovat.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Aleszpasek0
Newbie
27. 7. 2016   #21
-
0
-

#20 Kit
Ano té věty sem si všiml. Ten tranzistor má v pouzdře diodu a je to zapojeno tak, aby to nebylo pořád jakoby sepnuté, takže tohle funguje.

Nahlásit jako SPAM
IP: 109.81.210.–
hlucheucho+10
Posthunter
27. 7. 2016   #22
-
0
-

5 vrstev znamená, že každá bude svítit 1/5 doby. To znamená navýšit proud LED na 5-násobek. Zde se dostaneš do potíží, když dám na jednu LED 10 mA, 75 ks LED bude mít odběr 750mA. Při multiplexování 5 sekcí ale proud sekce vzroste na 3750 mA, 3A tranzistor je málo. Odpor 1k v sérii s řídící elektrodou MOSFETu bude zhoršovat dynamické vlastnosti, spolu s parazitními kapacitami tranzistoru bude způsobovat pomalé zapínání a vypínání tranzistoru. Při tak velkých proudech je pravděpodobné, že tranzistor shoří jak papír. Kondenzátor 150nF to spíš zhorší. Důležitá je malá impedance pro bě cesty - jak na zem tak na VCC, tedy úplný port. Porty schopné budit větší proudy a to sink i source jsou PORTB a PORTC. Podobné to bude s buzením BSS138, i zde je potřeba malá impedance sink i source. Tuto hromadu tranzistorů bych asi nahradil tranzistorovými poli (nějaké ULN2003). Dále tam nevidím nic co by nějak omezovalo proud LED. Odpory v sérii s LED musíš zvolit s ohledem na úbytek napětí LED, napájecím napětí, úbytky napětí na tranzistorech a proudy LED. Možná je potřeba pro LED vyšší napájecí napětí než pro MCU, pak je třeba vyřešit spínání spol. anod jinak - s převodem na vyšší napětí. Pak by bylo vhodné řešení s bipolárními tranzistory (darlingtonové dvojice).

Pokud jsou v datasheetu chyby, na TP výrobce bych si tuto domněnku ověřil. Pokud tomu tak je, poskytnou ti přesné informace. Pokud ne, vysvětlí ti, jak to je. Podle mých zkušeností jsou chyby v datasheetech MCU velice vzácné.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
hlucheucho+10
Posthunter
27. 7. 2016   #23
-
0
-

A ty poznámky ke kreslení schémat bych bral vážně. Toto nahrazování vede k chybám. Právě jiná schématická značka vede k nepochopení funkce a možná k mylné domněnce, že je to správně. A to jsme ještě neviděli DPS....

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Aleszpasek0
Newbie
27. 7. 2016   #24
-
0
-

jsou to RGB LED diody 30mA a napětí 2,1/3,3/3,3V. Zdroj je 3,3V/2A takže se o ty tranzistory nebojim a počítám s tim že to budu "multiplexovat". předřadný rezistor je pouze k červené barvě a to 39 Ohmů. DPS pošlu večer. To zapojení 1k a 150 pF mi poradil učitel na střední že to bude rychleji spínat, nebo případně bipolár, který dokáže spínat rychleji.

Divil sem se když si to psal ale tím pádem si v tom datasheetu protiřečí.

Nahlásit jako SPAM
IP: 178.21.189.–
hlucheucho+10
Posthunter
27. 7. 2016   #25
-
+1
-
Zajímavé

Kondenzátor par. k odporu se dával u bipolárních tranzistorů, rezistor byl nutný kvůli proudu báze (přechod B-E je v podstatě dioda) a kondenzátor "kompenzoval" parazitní kapacity tranzistoru. U MOS je situace jiná. Řídící elektroda je izolována od kanálu, v ustáleném stavu do ní neprochází žádný proud. V okamžiku změny napětí na řídící elektrodě se to chová jako kondenzátor. To znamená, že při "zapínání" musíš nabít kapacity tranzistoru a při "vypínání" je musíš vybít. Na rychlosti tohoto děje pak závisí výkonová ztráta tranzistoru, čím rychleji projdeš "lineární" oblast, tím menší výkonová ztráta bude. Tyto parazitní kapacity tranzistoru MOS se pohybují ve stovkách pikofaradů až jednotek nanofaradů. Z toho vyplývá požadavek na velmi malou impedanci. Zařazení rezistoru 1k udělá pravý opak, impedanci zvýší. Se vstupní kapacitou použitého tranzistoru 1k odpor vytvoří časovou konstantu asi 0,5 mikrosekundy. Odpovídající pomalá změna Uds tranzistoru povede k jeho ohřívání s rizikem zničení (nebo jistotou?) tranzistoru. Tyto spínací ztráty jsou mnohem problematičtější, bývají větší než ztráty v ustáleném sepnutém stavu.

Proud LED 30mA mám pocit, že je mezní hodnotou. Pohybovat se na této hranici moc vhodné není. Proud bych zvolil tak aby měla dostatečnou svítivost a současně dostatečnou rezervu vůči mezním hodnotám. Současně je potřeba brát v potaz i fakt, že LED svítí 1/5 pracovní doby. To vede k napájení LED proudem s pulzně šířkovou modulací, kde efektivní hodnota proudu bude odpovídat 1/5 proudu maximálního ( = proudu LED v době trvání impulzu). Tranzistor musí být dimenzován na maximální proud impulzu - přesněji jeho násobek daný počtem připojených LED, MOSFETy jsou na to hodně "háklivý".

Z napětí zdroje je nutné odečíst úbytky napětí na tranzistorech, odhaduji na několik desetin voltu. Pak na LED příjde méně než 3,3V, je potřeba se podívat do VA charakteristiky na proud LED. Může to vést ke stavu, kdy se pracovní bod LED usadí do bodu kdy bude jen bludičkovat. Velmi malá změna napětí na diodě může vést ke značné změně proudu diodou a tím i svítivosti. Vhodnější je strategie napájet LED proudem určeným sériovým rezistorem aby se to chovalo aspoň trochu jako zdroj konst. proudu. Malé změny proudu a tím i svítivosti už tak patrné nebudou. Nejspíš bych pro LED zvolil 4 - 5V a odpory výjdou pro LED 3,3V zhruba 10 - 30 ohmů, pro LED 2,1V asi 36 - 58 ohmů. S ohledem na vyšší napětí spol. anod LED potřebují MOSFETy budiče schopné pracovat na vstupu s 3,3V logikou a na výstupu mít napěťové úrovně odpovídající napájení LED. Současně je potřeba malá impedance výstupu.

Pro výše uvedený příklad, kde efektivní proud LED 10 mA vychází max. proud spínacím tranzistorem u spol. anod na 3,75A. Zvolil bych tranzistor alespoň 5A a jako budič bych uvažoval 4050 nebo 4049. U katod pak vychází max proud 50mA a vhodný tranzistor by měl zvládnout alespoň 100mA. V obou případech bych hledal tranzistory s malým RDS on.

Co se týče portů, nabyl jsem dojmu, že ne všechny jsou sink/source. Opět doporučuji důkladně prostudovat datasheet, byť má několik set stran. Porty se po resetu mohou chovat jako vstupy a na výstupy se nastavují softwarově. Pro jistotu bych si pomocí odporů asi 10k zajistil definovaný stav na řídících elektrodách tranzistorů.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
hlucheucho+10
Posthunter
27. 7. 2016   #26
-
0
-

Celou matici bych asi řídil takto:
1. vypnout katody, "vypínací" ztráty a tím i odpadní teplo se rozloží na velký počet tranzistorů
2. vypnout společnou anodu, zde dochází k vypnutí bez proudu
3. zapnout další společnou anodu, opět probíhá bez proudu
4. zapnout příslušné katody.

odstup mezi kroky 1 a 2 stačí 1 mikrosekunda, totéž platí pro 3 a 4. Pracovní cyklus celého displeje bych zvolil asi 5 ms.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Kit+11
Guru
27. 7. 2016   #27
-
0
-

#24 Aleszpasek
Odpor s kondenzátorem se na hradlo MOSFETu dává kvůli tomu, aby se snížila zátěž výstupu mikrokontroléru. Tedy odpor ji sníží, kondenzátor naopak trochu zvýší, ale zkrátí se spínací časy. Jedná se o kompromis mezi přetěžováním mikrokontroléru a koncového tranzistoru. Pro nižší kmitočty tam však vůbec nemusí být. Pro bipolární tranzistory je samozřejmě nutný kvůli ochraně přechodu B-E.

Bipolární tranzistory na výstupu však moc nedoporučuji, protože mají vyšší saturační napětí než MOSFETy a tím i větší ztráty a tepelnou zátěž koncového členu.

ULN2003 bych pro tento účel vůbec nedoporučoval, protože jeho saturační napětí je šílené - přes 1 V. Zkoušel jsem s ním spínat osvětlení a pak jsem ho nahradil MOSFETem. Nebe a dudy.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
hlucheucho+10
Posthunter
27. 7. 2016   #28
-
0
-

#27 Kit
při 50mA bude saturační napětí cca 0,6V, je to darlingtonova dvojice. Rozhodně jednodušší a levnější než 75ks MOS tranzistorů. Jinak existují tranzistorová pole s MOS, ale ta cena... Těch 0,6V by mi za to úsilí a/nebo peníze navíc nestály.

Nahlásit jako SPAM
IP: 195.178.67.–
hlucheucho+10
Posthunter
27. 7. 2016   #29
-
0
-

Možná bych si zvolil jiné uspořádání matice. Teď je to 25x5 RGB LED. Zkusil bych 13x10 s tím, že v takové matici vynechám 5ks LED, bylo by pak 13 spol. anod a 30 katod. Důležitá je redukce počtu tranzistorů z 80ks na 43 ks, menší nárok na počet portů a s počtem spojů asi i snažší návrh DPS.

Až příjdeš s řízením barvy a jasu pro každou LED samostatně, "ukočírovat" 75 katod bude komplikovaný problém.

Edit: měl bych si zopakovat malou násobilku. Chyby opraveny

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Kit+11
Guru
27. 7. 2016   #30
-
0
-

#28 hlucheucho
Obyčejně ty mosfety kupuji po koruně, to bych neviděl jako problém. Také snesou větší zátěž než ten ULN. A právě Darlingtonova dvojice má zmíněnou nectnost vyššího saturačního napětí, než kdyby tam byl jen jeden tranzistor.

Když to tak počítám, tak tranzistorů je potřeba jen 30 ks pro všechny diody a všechny barvy.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
hlucheucho+10
Posthunter
27. 7. 2016   #31
-
0
-

BSS138 snese 220mA, RDS on je 3,5 ohm a stojí 1,61Kč od 50ks. Může použít ULN2803 (obsahuje 8 tranzistorů), snese 500mA. Při odběru 10ks stojí 8,84Kč. Podle cen GM Electronics ušetří třetinu. Pak ušetří dlouhé hodiny při ručním pájení (asi nemá osazovací automat). Pokud to nechá udělat na osazovacím automatu nebo ručně v manufaktuře, bude platit za položku. Pak ho i osazení výjde levněji. Jediná nevýhoda je těch 0,6V. Že to nebude asi nápájet z baterií, tak by to neměl být tak velký problém. Když se dívám na specializované obvody pro buzení LED, stojí sice 170Kč, ale má 48 výstupů a každý lze řídit pomocí PWM samostaně. V podstatě určený pro LED RGB displeje. Kompatibilní s 3,3V napájením. Dva tyto obvody připojené k sériovému rozhraní nějakého jednoduchého MCU a "je vymalováno"

hu

Nahlásit jako SPAM
IP: 195.178.67.–
hlucheucho+10
Posthunter
27. 7. 2016   #32
-
0
-

#30 Kit
má RGB LED, katod má 3x25= 75

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Kit+11
Guru
27. 7. 2016   #33
-
0
-

#32 hlucheucho
To uspořádání ledek mi stále není jasné. Pokud jich má 25 (matice 5×5) v RGB (3 katody), tak na to mi stačí 20 tranzistorů. Zapájené to je za chvilku, nepotřebuji žádný osazovací stroj a ani nemusím vrtat díry do DPS.

Kromě toho používám mosfety dimenzované na 2 A, chlazení řeší DPS.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Aleszpasek0
Newbie
27. 7. 2016   #34
-
0
-

Nějak bych uplně nepřekopával zapojení, když to tak nějak funguje. Pravděpodobně jste oba zapomněli že mě trápí spíš to, že některé jdou normálně a některé ne a není to spojeno barvou ani třeba délkou cesty, takže bych to sváděl na MCU, který je složitější než bych potřeboval. Stačilo by mi, kdyby měl 80 logických vstupů a výstupů a ne třeba I2C, A/D převodník atd. Mám jen pocit že se mi nepodařilo vše vypnout. Nicméně díky za vše co jsem se tu naučil o spínání tranzistorů a dalších možnostech. Při ceně RGB LED diod už je skoro jedno jestli to bude 80 nebo nějakých 20 tranzistorů :)

Nahlásit jako SPAM
IP: 178.21.189.–
Aleszpasek0
Newbie
27. 7. 2016   #35
-
0
-
Nahlásit jako SPAM
IP: 178.21.189.–
KIIV+42
God of flame
27. 7. 2016   #36
-
+1
-
Zajímavé
Kit +

Jestli ja jeste budu stavet dalsi 3D RGB led kostku, tak asi nastriham led pasek s WS2812. Rizeni je sice narocne na casovani, ale staci to posilat jen pokud to potrebuje update. A da se to vylepsit a posilat 8 kanalu naraz.

Nahlásit jako SPAM
IP: 213.220.205.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kit+11
Guru
27. 7. 2016   #37
-
0
-

#36 KIIV
Navíc to má skvělou výhodu, že se ty obvody zapojují kaskádově.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Aleszpasek0
Newbie
28. 7. 2016   #38
-
0
-
Nahlásit jako SPAM
IP: 109.81.210.–
hlucheucho+10
Posthunter
28. 7. 2016   #39
-
0
-

#33 Kit
prohlídni si obrázek u příspěvku #15, má tam napsaný, kolik je katod.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
hlucheucho+10
Posthunter
28. 7. 2016   #40
-
+1
-
Zajímavé

Vrátím se k tomu, proč některé LED nesvítí. Pro diagnostiku by asi bylo vhodné použít osciloskop, nejlépe dvoukanálový digitální paměťový. Nejdříve se podívej na porty, zda na nich je očekávaný průběh napětí. Pak se podívej přímo na LED:
- kanál 1 připojíš na její anodu
- kanál 2 přopjíš na její katodu
- jako zdroj synchronizace čas. základny nastav kanál 1
- zobraz si i rozdíl kanál 1 - kanál 2

Paměťové osciloskopy umí zobrazit min, max hodnoty napětí, změřit napětí bodu na průběhu který ukážeš atd. Použití těchto funkcí bývá rychlejší než počítat dílky a přepočítávat na skutečné hodnoty napětí a času.

Problém může vzniknout právě kvůli napájení LED přímo bez odporu ze zdroje 3,3V. Každá součástka má výrobní toleranci a tak ne každá LED bude mít při 3,3V stejný proud. To může vést ke dvěma extrémním situacím:
1. LED bude mít při 3,3V menší proud než je typická hodnota a tím menší svítivost nebo už nebude svítit vůbec
2. LED bude mít při 3,3V větší proud než je typická hodnota a tím větší svítivost. Pokud proud bude moc velký, LED se zničí a nebude svítit vůbec

Lze si to snadno vymodelovat na VA charakteristice která by měla být v datasheetu. Podívej se na proud LED v prac. bodu ve kterém uvádějí charakteristické údaje, např. 3,3V/10mA a pak kolem těch 3,3V udělej krok např. 0,1V. Ikdyž LED může mít menší strmost VA charakteristiky než obyčejná dioda, bude malé změně napětí odpovídat velká změna proudu. Toto je kámen úrazu při napájení LED z tvrdého zdroje napětí, nemáš žádnou kontrolu nad proudem LED. Toto je důvod, proč specializované obvody pomocí PWM vytvářejí zdroj konst. proudu pro každou LED. Pokud se neřeší energetická účinnost a jde se jen za cenou a dostupností součástek v maloobchodě (s příchodem e-shopů tento důvod ztrácí na významu), použijí se předřadné rezistory a napájení pro obvod s LED se navýší.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Aleszpasek0
Newbie
28. 7. 2016   #41
-
0
-

#40 hlucheucho
Díky a to ještě není řeč o tolerancích tranzistorů, které taky nejsou všechny stejné a může na nich být různý úbytek. Bohužel doma nemám osciloskop, takže to můžu naprogramovat a proměřit napětí.

Nahlásit jako SPAM
IP: 109.81.210.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 178 hostů

Podobná vlákna

Programování — založil Yety

Programování v C# — založil Tonda Gabriel

Programování.. — založil Fliper

Programování 2D her — založil Lorin

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý