Školní projekt Světla na křižovatce, zapojení semaforu

Zdravím, nevím si rady s následující úlohou:

  1. Navrhněte obvodové řešení umožňující připojit na port P1 LED s pracovním proudem 180 mA/3,5 V, které budou plnit funkci světel na křižovatce (diody se rozsvěcují úrovní log. 1 na vývodu portu) a na port P3 přepínač 8 x DIP, který bude sloužit k volbě režimu semaforu. Potřebné parametry použitých součástek volte dle katalogu.
  2. Světla na křižovatce budou následující:
    ◦ červená hlavní
    ◦ oranžová hlavní
    ◦ zelená hlavní
    ◦ červená vedlejší
    ◦ oranžová vedlejší
    ◦ zelená vedlejší
    ◦ zelená chodci hlavní
    ◦ červená chodci hlavní
  3. Sestavte program, který bude plnit následující provozní režimy semaforu:
  4. pokud bude , potom bude blikat oranžová na hlavní a vedlejší s periodou 1 s, se střídou 1:1
  5. pokud bude , potom bude svítit červená chodci. Po přepnutí P3.0 na log.1:
  6. po 15 s rozsvítí oranžová na hlavní silnici a po dalších 3 s se rozsvítí červená na hlavní silnici
  7. bude červená chodci svítit ještě 20 s a pak bude následovat zhasnutí červené chodci a rozsvícení zelené chodci na dobu 20 s.

Vím, že se jedná o komplikovanejší zadání, ale prostě z hlavy to nedokažu vymyslet. Má někdo nějaký návrh, nebo pokyn k řešení této úlohy? Předem moc děkuji za jakoukoliv pomoc.fe

:arrow_right: administrator: přejmenováno z "LED k 8051 - jako semafor"

NO ledku pripojiš na tranzistor typu NPN v zapojeni so spoločným emitorom. Z katalogu vyberieš vhodny typ Tranzistora do baze mu daš vhodny odpor (hodntu vypočitaš podla vzorca čo ste sa učili)
Vypočitaš predradny odpor ktory bude zapojeni do serie s ledkou a tranzistorom. aby tiekol menovity prud (nie maximalny urceny v katalogu od LED)

NO ked to budeš mať ozvy sa …

Atlan, ve vší úctě, nemáš pocit, že to bylo dost mimo?

Ja myslim ze to Atlan vystihl uplne presne. Pokud se musi ptat na takove veci, tak je potreba zacit od zacatku… Tudiz zapojenim LED a rozblikat ji. Prece neocekava, ze za nej napiseme domaci ulohu. Nehlede na to ze v zadani neco chybi, vzdy je tam pokud bude (zde chybi podminka) atd. Ja jsem se to nenaucil jinak, proste zkouset, zkouset, maximalne odpali soucastku.

Samozřejmě, ať se snaží. V zadání toho chybí poměrně dost, ale i přesto si myslím, že v té Atlanově radě pár nepřesností je:

  1. Není uveden druh MCU, nicméně jelikož je to v sekci 8051/8052, tak předpokládám, že to bude na nějaký MCU s tímto jádrem. Jelikož ale 8051 apod. spínají výstupy pouze v nule (jedničku díky vnitřnímu zapojení I/O pinu neumí), tak bych to viděl spíš na tranzistor PNP s LEDkou normálně v kolektoru.

  2. Pokud počítám napájení 5V a úbytek napětí na tranzistoru třeba 1.4V a na LED těch zadaných 3.5V, kolik zbyde pro odpor k LED? I kdybych počítal třeba jen volt na tranzistor, tak se může i přesto stát (jelikož se úbytky napětí na výkonových LED pohybují v dost velkých rozptylech, dle výrobce a typu - nebude to v praxi přesně 3.5V, leda že by se vybíralo měřením), že se na těch 180mA nepodívá. Takže je přinejmenším třeba upřesnit, že bude nejspíš potřeba použít vyšší napájecí napětí pro LED + tranzistor + předřadný odpor (zřejmě před stabilizátorem), nebo třeba nějaký zdroj proudu pro LED.

Preco tak vela? Ak sa da do bazy dostatocny prud, nevidim dovod aby aj pri 0,5A bol ubytok medzi CE mensi ako 0,2V. Ak je tam 1,4V, znamena to, ze tranzistor je privrety, lebo sa mu nedostava dostatocny bazovy prud. Pri pouziti FETU (napr. IRF7341 N-FET, pri 4V UGS ma 0,06ohm * 0,18A = 0,0108V a v puzdre SO8 su hned dva, alebo IRF7342 2x P-FET) ho ani nemusi trapit prud do bazy a moze ho ovladat praimo z x51 (IRF7342) Vykonova strata na FETe je zanedbatelna, (0,180,180,06 = 2mW), takze to puzdro SO8 je viac ako primerane.

Jasný, proč ne, já bych byl taky klidně pro FET. Spíš jsem chtěl názorně přiblížit podstatu problému.

díky příšerné vytíženosti zašlu schéma zítra nebo max v sobotu, doufám, že budete stále otevřeni ku pomoci. A jedná se o 8051.

zdravím, tak co se tyce navrhu zapojeni, tak to si myslím, že mám správně… alespoŇ funkčně je to ok. nevylučuji, že existuje snadnější způsob. Ale co se týče samotného programu, tam jsem bohužel bezradný. Byl by někdo ochoten mi nastínit jak na to alespoň nějakým podrobnějším rozborem například pomocí vývojového diagramu? Pokud ano, budu moc vdečný.

Co se týče těch podmínek “Pokud…”, tak tam má být toto: 1.pokud bude P3.2 Λ P3.3 = 1, potom bude blikat oranžová na hlavní a vedlejší s periodou 1 s, se střídou 1:1
2. Pokud bude P3.2 Λ not P3.3= 1, potom bude červená chodci. Po přepnutí P3.0 na log.1: atd. atd. atd. viz nahoře

tak zdravím znovu. Program mám sice hotovy, ale hlásí několik chyb… v programování v assembleru moc dobrý nejsem, tak doufám, že to budou jenom nějaké snadno odladitelné chybky. A teda ještě doufám, že mi někdo pomůže :smiley:

[code]
include REG51.INC
org 0;

;HLAVNÍ PROGRAM - START - *******************************************************************************************

START: JB P3.2, OR_HL_VEDL_BLIK ; bude blikat oranžová na hlavní a vedlejší s periodou 1 s, se střídou 1:1
SJMP CER_CHODCI_SVITI ; není-li splněna první podmínka, bude svíti červená chodci

		JB		P3.0,		PODM_2_CASTI								;		testování brány P3.0	na log. 1, pokud ano -> na navesti

;HLAVNÍ PROGRAM - KONEC - *******************************************************************************************

;**********************************
ZPOZ_1_SEKUNDA: mov R3,#251 ;*
prd3: mov R2,#234 ;*
prd2: mov R1,#7 ;*
prd1: djnz R1,prd1 ;*
djnz R2,prd2 ;*
djnz R3,prd3 ;*
Ret ;*
;**********************************
ZPOZ_15_SEKUND: mov R3,#254 ;*
pes3: mov R2,#115 ;*
pes2: mov R1,#255 ;*
pes1: djnz R1,pes1 ;*
djnz R2,pes2 ;*
djnz R3,pes3 ;*
Ret ;*
;**********************************
ZPOZ_3_SEKUND: mov R3,#254 ;*
krk3: mov R2,#23 ;*
krk2: mov R1,#255 ;*
krk1: djnz R1,krk1 ;*
djnz R2,krk2 ;*
djnz R3,krk3 ;*
Ret ;*
;**********************************
ZPOZ_20_SEKUND: mov R3,#255 ;*
prc3: mov R2,#153 ;*
prc2: mov R1,#255 ;*
prc1: djnz R1,prc1 ;*
djnz R2,prc2 ;*
djnz R3,prc3 ;*
Ret ;*
;**********************************

OR_HL_VEDL_BLIK: MOV P1.4, #0 ; zhasni ORANŽOVÁ VEDL
LCALL ZPOZ_1_SEKUNDA ; zpoždění 1 sekunda
MOV P1.4, #1 ; rozsvit ORANŽOVÁ VEDL
LCALL ZPOZ_1_SEKUNDA ; zpoždění 1 sekunda
MOV P1.1, #0 ; zhasni ORANŽOVÁ HLAVNÍ
LCALL ZPOZ_1_SEKUNDA ; zpoždění 1 sekunda
MOV P1.1, #1 ; rozsvit ORANŽOVÁ HLAVNÍ
LCALL ZPOZ_1_SEKUNDA ; zpoždění 1 sekunda
SJMP START
;****************************************************************************
CER_CHODCI_SVITI MOV P1.7, #1 ; svítí červená chodci
SJMP START
;****************************************************************************
PODM_2_CASTI LCALL ZPOZ_15_SEKUND ; po 15 sekundách další instrukce
MOV P1.1, #1 ; rozsvit ORANŽOVÁ HLAVNÍ
LCALL ZPOZ_3_SEKUND ; po 3 sekundách další instrukce
MOV P1.0, #1 ; rozsvit ČERVENÁ HLAVNÍ
MOV P1.7, #1 ; na 20 rozsvit ČERVENÁ CHODCI
LCALL ZPOZ_20_SEKUND ; 20 s bude svítit ČERVENÁ CHODCI
MOV P1.7, #0 ; ČERVENÁ CHODCI zhasnutá
MOV P1.6, #1 ; rozsviceni ZELENA CHODCI 20 s
LCALL ZPOZ_20_SEKUND ; 20 s bude svítit ZELENAÁ CHODCI

END[/code]

[code]
include MOD51
;$INCLUDE(MOD51)
org 0 ; Jelikož nepoužíváš žádná přerušení, tak je možno začínat od nuly
;ajmp START ;jinak se doporučuje posunout počátek až za adresy přerušení

;HLAVNÍ PROGRAM - START - *******************************************************************************************
;org 2Bh ;mám ten dojem, že toto je doporučovaná adresa pro 89C51
START: JB P3.2, OR_HL_VEDL_BLIK ; bude blikat oranžová na hlavní a vedlejší s periodou 1 s, se střídou 1:1
JMP CER_CHODCI_SVITI ; není-li splněna první podmínka, bude svíti červená chodci

     JB      P3.0, PODM_2_CASTI       ; testování brány P3.0   na log. 1, pokud ano -> na navesti

;HLAVNÍ PROGRAM - KONEC - *******************************************************************************************

;**********************************
ZPOZ_1_SEKUNDA: mov R3,#251 ;*
prd3: mov R2,#234 ;*
prd2: mov R1,#7 ;*
prd1: djnz R1,prd1 ;*
djnz R2,prd2 ;*
djnz R3,prd3 ;*
Ret ;*
;**********************************
ZPOZ_15_SEKUND: mov R3,#254 ;*
pes3: mov R2,#115 ;*
pes2: mov R1,#255 ;*
pes1: djnz R1,pes1 ;*
djnz R2,pes2 ;*
djnz R3,pes3 ;*
Ret ;*
;**********************************
ZPOZ_3_SEKUND: mov R3,#254 ;*
krk3: mov R2,#23 ;*
krk2: mov R1,#255 ;*
krk1: djnz R1,krk1 ;*
djnz R2,krk2 ;*
djnz R3,krk3 ;*
Ret ;*
;**********************************
ZPOZ_20_SEKUND: mov R3,#255 ;*
prc3: mov R2,#153 ;*
prc2: mov R1,#255 ;*
prc1: djnz R1,prc1 ;*
djnz R2,prc2 ;*
djnz R3,prc3 ;*
Ret ;*
;**********************************

OR_HL_VEDL_BLIK: clr P1.4 ; zhasni ORANŽOVÁ VEDL
LCALL ZPOZ_1_SEKUNDA ; zpoždění 1 sekunda
setb P1.4 ; rozsvit ORANŽOVÁ VEDL
LCALL ZPOZ_1_SEKUNDA ; zpoždění 1 sekunda
clr P1.1 ; zhasni ORANŽOVÁ HLAVNÍ
LCALL ZPOZ_1_SEKUNDA ; zpoždění 1 sekunda
setb P1.1 ; rozsvit ORANŽOVÁ HLAVNÍ
LCALL ZPOZ_1_SEKUNDA ; zpoždění 1 sekunda
SJMP START
;****************************************************************************
CER_CHODCI_SVITI: setb P1.7 ; svítí červená chodci
SJMP START
;****************************************************************************
PODM_2_CASTI: LCALL ZPOZ_15_SEKUND ; po 15 sekundách další instrukce
setb P1.1 ; rozsvit ORANŽOVÁ HLAVNÍ
LCALL ZPOZ_3_SEKUND ; po 3 sekundách další instrukce
setb P1.0 ; rozsvit ČERVENÁ HLAVNÍ
setb P1.7 ; na 20 rozsvit ČERVENÁ CHODCI
LCALL ZPOZ_20_SEKUND ; 20 s bude svítit ČERVENÁ CHODCI
clr P1.7 ; ČERVENÁ CHODCI zhasnutá
setb P1.6 ; rozsviceni ZELENA CHODCI 20 s
LCALL ZPOZ_20_SEKUND ; 20 s bude svítit ZELENAÁ CHODCI

END[/code]

51čkový assembler nezná SJMP. Změna stavu bitu se dělá pomocí clr nebo setb, nikoli mov.
U návěstí CER_CHODCI_SVITI a PODM_2_CASTI ti chyběly dvojtečky.