Železniční přejezd

Dobrý večer
Dokončil jsem stavbu robotických potvůrek - honzo3 ještě jednou dík za pomoc.
Kamarád “Mašinka” přinesl zapojení tranzistorových blikačů, že potřebuje signalizaci na železniční přejezd.Řekl jsem mu, že je “Demode”, neboť šuplíkový PIC to zvládne lépe a radostněji.Vytáhl jsem PIC16F627A,zapřemýšlel o nejsnažším rozložení vývodů pro tišťák -
PB0-případné houkání před přejezdem,PB1-bílá levá,PB2-červená l1,PB3-čl2,PB4-bp,PB5-čp1,PB6-čp2,PB-7-výstražný signál.
Pak jsem se vsadil,že dříve než bude mít nastrkané součástky do pole,budu mít naprogramovaný PIC.Zásluhou dlouhého kouře při programování jsem ale o 3 minuty prohrál.
Prosím assembleristy o shovívavost.
Program v PICBasicuPro při použití proměnné Sm místo čidel vypadá takto:

  • Name : Prejezd2.BAS
    Sm VAR BYTE
    Sm = 0
    TRISB = 0

VOLNO:
portb = %00010010
PAUSE 250
portb = %00000000
PAUSE 250
Sm=Sm + 1
IF Sm = 10 THEN Sm = 0 : GOTO STUJ
GOTO VOLNO

STUJ:
portb = %00100100
SOUND PORTB.7,[100,10,50,10]
PAUSE 100
portb = %01001000
SOUND PORTB.7,[100,10,50,10]
PAUSE 100
Sm = Sm + 1
IF SM=10 THEN Sm=0 : GOTO VOLNO
GOTO STUJ

Funguje to - neuvěřitelné.Pro nastavení časů a tónu výstrahy bude nutno udělat na nějakém přejezdu časový snímek.

Ale při ranním usínání mě pronásledovaly tyto otázky:

  1. Proč všechny programy v chytrých knihách o PBP začínají při použití PortuB příkazy
    TRISB = %00000000 nebo PortB = 0 případně oběma,když při zapnutí se stejně všechny porty nastaví na 0 ?

  2. V PBB mohu nastavovat jednotlivé piny portu několika způsoby např. portb = %00100100,nebo např. zadávat změny po jednotlivých pinech.
    Když jsem program přepsal na změny po pinech zabral v paměti o 7 slov více (165/859 oproti 158/866).Co se ale děje v té černé krabičce?
    Je pro ni snažší (rychlejší) plnit jeden složitější příkaz,nebo čtyři jednoduché?

3.Výsledek nesplňoval první část hesla mého koutku - “Co nejsnažším způsobem dosahovat žádaných efektů.” - naprogramovaný PIC vyžadoval externí krystal.
Jelikož ani po prostudování několika chytrých knih o PBP nejsem schopen vytvořit příkaz pro nastavení konfigurace procesoru,zkusil jsem PIC naprogramovat bez konfiguračního slova a následně mu naprogramovat jako konfiguraci 3F19.Už krystal nevyžaduje,ale lze takovýmto způsobem postupovat vždy a zadávat jiné konfigurace dodatečně,když bude konfigurace jiná,než nastavuje inc?

Prosím misionáře,když vidí prosťáčka, o shovívavost a o odpovědi.
Dík.
PS - Já to mám jednodušší,“Mašinka” složitější o jeden drát ke každému návěstidlu,oproti blikači s antiparalelními diodami.O druhu čidel a jejich počtu se vede vzrušená debata.

:arrow_right: administrator: přesunuto z "Elektronika s mikrokontroléry, procesory"

Od toho jsme všichni snad tady. :smiley: :smiley: A ICD2 už jsem si opravil. :open_mouth:

Nastavení PORTů a TRISů je součástí init procesoru, kdy se nastavují všechny potřebné věci jako AD, I2C a bůh ví co v ních ještě je. A nikdo ti nikdy nezaručí, že TRIS bude b’00000000’ a PORTx bude nastaven jako výstupní, tedy b’00000000’. 100x tak bude a po 101 ne a mohl by jsi třeba zničit “něco” za Y2K Kč.

Takže, asi to tak je u toho PBP. Pokud je to stejné jak ASM.

Movlw b'00100100' movwf PORTB
zaberou 2 slova, ale

bcf PORTB,0 bcf PORTB,1 bsf PORTB,2 bcf PORTB,3 bcf PORTB,4 bsf PORTB,5 bcf PORTB,6 bcf PORTB,7
zabere 8 slov. Doufám,že počítám dobře. :smiley:

Default, tedy po zapnutí, je registr PCON nastaven na interní 4Mhz oscilátor.
Pokud nastavíš

_BODEN_OFF EQU H'3FBF' _CP_OFF EQU H'3FFF' _DATA_CP_OFF EQU H'3FFF' _PWRTE_OFF EQU H'3FFF' _WDT_OFF EQU H'3FFB' _LVP_OFF EQU H'3F7F' _MCLRE_OFF EQU H'3FDF' _INTRC_OSC_NOCLKOUT EQU H'3FFC'
A tohle odpovídá tvému 3F19. Jsi se trefil :smiley: :smiley: :smiley: :smiley:

Zkus 3F11, bude _PWRTE_ON , máš jistější reset

Díky.
Bod 1. je jasný
Bod 2. jsem pochopil, že provedení složitějšího příkazu je rychlejší
Bod 3. Mohu tedy tu konfiguraci nastavovat až při programování? Je nastavení konfigurace nezávislé na skompilovaném programu?

3F11 funguje
K vánocům bude hledačka kovů,až najdu poklad,tak se s Tebou rozdělím

když napíšeš konfiguraci do programu, tak ji překladač stejně přeloží jako číslo, třeba jako 0x3F11. Takže je to jedno, jestli to napíšeš do programu a nebo jako číslo při programování. Pokud víš, co které číslo znamená :smiley:

Doufám, že najdeš h…, to bych 1/2 nechtěl. :smiley:

:arrow_right: administrator: příspěvek byl upraven

Závěrečná rekapitulizace

  1. Ikdyž PIC není ženského rodu,stejně se někdy zachová podivně
  2. Z hlediska paměti
    Pokud potřebuji v PBP změnit najednou nastavení jednoho pinu,lépe volit příkaz PB.z = x - jedno slovo
    Pokud 2 piny je jedno zda např. portb = %00000011 nebo dva příkazy PB.0 = 1:PB.1 = 1 - dvě slova
    Pokud více pinů, vždy nastavení celého portu - dvě slova
  3. Pokud nebudu schopen v PBP stvořit příkaz pro konfiguraci,který by překladač akceptoval,lze v programu pro programátor otevřít konfigurační okno,zde zaškrtat potřebné konfigurační příkazy,program na jejich základě vytvoří konfigurační číslo (odtud mé 3F19) a toto zapíši do PICu.
    Při překladu konfigurace nemá vliv na zbytek programu.

Snad vás tím PBP příliž neotravuji.
Při pohledu na pole,kde se vedle PICu krčí jeden odpor,jeden elektrolyt a vedle 6 ledek s odpory a repráček mě jímá pocit osamělosti,jednoduššeji by to asi opravu nešlo,nebo snad ano?

Blbost - jde.
Odpor u PICu je zbytečný.
Našel jsem na pandatron.cz školu programování v “češtině”,přestávám s možností načerpat základy z cizojazyčných knih a nebudu již s prkotinami otravovat.
Díky za pomoc.

ŠLO by to celé napsat v ASSEMBLERU. :smiley:

S tímhle zdrojem se teda daleko nedostaneš!

Skola programovani PIC je aj tu:
elektronika.ezin.cz/
ale neviem posudit hodnotu obsahu a porovnat to s predchadzajucim odkazom, lebo do PIC moc nemusim, nasiel som to len nahodou.

Len dufam, ze aspon trosku pomoze…

honza3
nejjednodušší - věc názoru
Program v PBP má 21 řádků,od zasenutí k počítači k rozblikání ledek trvalo cca 15 minut - vygenerovaný asm má řádkú podstatně více.
I když předpokládám,že asm není vlivem překladače PBP zcela optimální,zvolený postup se mi zdá jednodušší.
Nevím,ale domnívám se,že je to stejné jako u programování PC.Když jsem potřeboval řídít osm serv přes PC,použil jsem program z knihy pro PIC (v PBP) ,naprogramoval PIC a napsal ovládací program pro ovládání v mém oblíbeném VB.Výsledné programy byly jistě z hlediska optimalizace horší a pomalejší,než kdybych je uměl napsat v C nebo v assembleru,ale pro daný účel zcela dostačující.

jankop
Určitě máš pravdu,ale je tam třeba vysvětlena možnost konfigurace až v programátoru,takže jsem zde nemusel prudit

stanleyv
Díky moc,móc zajímavé

Ptal jsi se, jak to zjednodušit. Tak jsem ti odpověděl dle mého názoru. Pro mě je jednodušší to napsat v asm! Pro tebe v PBP, protože ho umíš.

Sice tentokrát by to zase asi patřilo jinam,ale souvisisí to.
Dočetl jsem se na dvou místech na netu,že je zbytečné pokud je na jednom pinu jedna Led 20mA dávat tam ještě odpor.Ledky a PIC to prý to snáší.
Mé bílé jsou na 3,4 V,červené na 1,9 V,bojím se to spustit bez odporú.
Nemá s tím někdo zkušenosti?

V datasheetu se dočteš, že jeden pin zvládne 25mA, ale součet všeho nesmí přesáhnout 200mA.

PICu to bude vyhovovat ,o mA nejde,ale co ty Ledky,do kterých půjde podstatně více V.

Jinak uz jsem nasel jak donutit MPASMWIN,aby vzal příkaz konfigurace z PBP - v inc PBP dat pro zde zadanou konfiraci při použití MPASM středník - to je asi opravdu lepší nastavovat konfiguraci až v programátoru.

Nevydržel a zapnul.
Z nízkosvítích Ledek se rázem staly vysocesvítící,sousedi si myslí,že jsme již rozsvítili stromeček,ale pokud to vydrží do rána začnu přemýšlet jak donutit PIC,aby vydával zvuky a nepotřeboval ten na poli zbylý elektrolyt a repráček.

Tím že dam dáš ; , tak to co je za středníkem je ignorováno.

Pokud do něj pustíš 220V, tak si myslím, že nějakej zvuk z něj dostaneš :blush:
A jestli jsi tam nedal odpory, změr odber jedné LED a s určitostí bude vyšší jak 25mA.

Nejprve k těm Led.
Jako vždy - máš pravdu.Ledka si bere 48mA,ale v rámci toho,že provoz je přerušovaný,údaje vždy musí počítat s jistou mírou bezpečnosti a nejlepším strávením stříbrné neděle bude případný nákup nového PICu, nechám blikač testovat do rána.

S tím středníkem je to složitější
Pokud chci v PBP zadat příkaz ne v jeho kodu,ale v asm,musí vypadat např
@ DEVICE pic16F627A, INTRC_OSC_NOCLKOUT

PBP má stejně jako MPASMWIN pro každý PIC inc. Zde
NOLIST
ifdef PM_USED
LIST
include ‘M16F62xA.INC’ ; PM header
device pic16F627A, xt_osc, wdt_on, mclr_on, lvp_off, protect_off
XALL
NOLIST
else
LIST
LIST p = 16F627A, r = dec, w = -302
INCLUDE “P16F627A.INC” ; MPASM Header
__config _XT_OSC & _WDT_ON & _MCLRE_ON & _LVP_OFF & _CP_OFF
NOLIST
endif
LIST

Jilikož mám v Micro Code Studiu nastaven MPASMWIN,který jsem získal s programátorem s programem na jeho ovládání, tento se bránil,protože jsem mu asi vlastně vnucoval dvojí konfiguraci.
Stačí tedy do příslušného inc PBP před řádek
__config _XT_OSC & _WDT_ON & _MCLRE_ON & _LVP_OFF & _CP_OFF
dát středník a je vymalováno.Má to tu nevýhodu,že pokud jej tam nechám, musela být konfiguracev PBP definována vždy,i když by původní nastavení vyhovovalo.
Jak vidím tak moje hlava asi v životě nebude schopna pojmout asm a zato Tebe důvěrně seznámím s PBP.
Dík za trpělivost

HOHO. To už tu bylo a smazal jsem si ICD2!

To ti toho PICu není líto? Skoro 2x. Dej tam tranzistor a máš to. Aby jsi nedopadl ja já kdysi dávno.kuk

Test jsem ukočil - po 14 hodinách.
Hoši na cizím fóru maji pravdu,když si takto vyrábí poziční světla na modely letadel.
Ledky svítí,PIC nehřeje - funguje to.
Kdyby to bylo pro mne je to jasné,Jelikož to půjde na “export”,přidám tam “Mašinkovi”,přinejmenším odpory.