Po přechodu z 16F84 na 16F74 nefungují porty

jednoduší bude v tom programu spustit simulaci a v okamžiku zápisu na port b kouknout zda jeho registr trisb se správně přesetil , i v knihovnách se přeci dají nastavovat individuálně porty ! a propo jak ta knihovna si přeloží čtení portuB jenž část bude běžet trvale jako výstupní ? to ty výstupy prostě resne a zapne jako vstupní jen tak ? to se mi nezdá ? vám ano ?

PS: omluvte pravopis dík

procházím manuál a uplně standartně tam je funkce TrisB = xx
Tak ji přidej do zdrojáku a nastav si ten port jako výstupní !

jen tak pro info , todle udela muj prekladac

513: OUTPUT_HIGH(PIN_B0); 3F7 1683 BSF 0x3, 0x5 3F8 1006 BCF 0x6, 0 3F9 1283 BCF 0x3, 0x5 3FA 1406 BSF 0x6, 0 514: OUTPUT_LOW(PIN_B0); 3FB 1683 BSF 0x3, 0x5 3FC 1006 BCF 0x6, 0 3FD 1283 BCF 0x3, 0x5 3FE 1006 BCF 0x6, 0

edit: skus ovladat jinej pin, nebo celej port, jinej port

Alebo aj nie.
Co vravi na ten kod simulator (v MPLAB-e)? Meni sa stav RB0 tak ako sa ma menit? A meni sa po takom case ako by sa dalo predpokladat (treba nastavit hodinovu frekvenciu v simulatore a pouzit Stopwatch)?

PIC16F74 bola kadysi moja srdcovka a samozrejme pri poriadnom pouzvani robi to, co ma.

Tomu já rád věřím. Je jasné, že mám někde botu. V simulátoru se portb mění bez problému. Používám microC PRO for PIC. Když máš takové zkušenosti, třeba mi řekneš, jestli je třeba něco speciálního pro tento procesor nastavit… Např. má interní hodiny? S těmi bych to totiž vyzkoušel mnohem radši.

Edit:
Sorry, mám debilní otázky, mrknu se do datasheetu

:smiley: Pri vsetkej slusnosti sa k tomuto nebudem vyjadrovat :wink:

No, pravda je, ze toto sa da najst v datasheete.
Druha vec je, preco Vam ta 16F74-ka nefunguje.
Mam podozrenie na dve veci z oblasti HW:
1, nespravne fungujuci oscilator
2, zapnuty watchdog
K bodu 1 - ak by oscilator bezal prilis pomaly, tak to blikanie by bezalo velmi pomaly - a teda sa moze zdat, ze LED svieti stale. K bodu 2 - ak by bol zapntuy WDT, tak by po resete MCU hned nabehol na vytiahnutie pinu do vysokej urovne, kym pride na zhodenie pinu do nizkej urovne, WDT ho resetuje. V resete su piny v stave vysokej impedanicie, ale tento stav pominie po pat milisenundach kym vnutorny reset necha MCU bezat a kod v nom po par instrukciach vytiahne pin do vysokej urovne. Teda zda sa, ze je stale vo vysokej urovni.
Teda treba si skontrolovat v prislusnom napalovacom SW nastavenie konfiguracnych bitov.
Dalej podozrenie na dve veci z oblasti FW:
1, nespravne fungujuce kniznice na delay
2, nespravne fungujuce kniznice na ovladanie portov
K bodu 1 - ak by oneskorenie bolo prilis male, to by sa prejavilo tym, ze LED by velmi rychlo blikala. Pri blikani nad niekolko desiatok az sto Hz sa cloveku bude zdat svit LED ako neprerusovany, ale s nizsou intenzitou.Ak zmeriate napatie na takomto pine obycajnym multimetrom, zmeriate nieco okolo 2-3V, co je stredna uroven tohoto meniaceho sa napatia. K bodu 2 - jednoducho sa nenastavuje spravne kominacia TRIS a PORT.
Toto sa da vystopovat simulatorom. Treba si dat breakpoint pred nastavenie pinu do vysokej urovne, pred nastavenim do nizkej urovne a pri spravne nastavenej systemovej frekvencii sledovat udaj na stopwatch.

Edit:
Ak horeuvedene nepomoze, bolo by vhodne dat sem aj schemu, pripadne obrazok celeho zapojenia, kompletny zdrojak, vysledok kompilacie, informacie o pouzitom prigramatore atd…

No interne hodiny nema, pretoze je to pekne obstarozny kusok. Jednoducho patri do muzea.
Ak chcete interne hodiny a mnoho inychvychytavok oproti 16F74, tak si kupte 16F887 (nie 877 ani 877A, ale 887).
A zistite, ze je to aj podstatne lacnejsi MCU.
Samozrejme, vhodnych kandidatov je vela, napriklad aj z rady PIC18Fxxxx.

Mám jednodušší návrh - nemáte někde ve svém muzejním softwarovém archívu nějaký fungující blikač s koncovkou hex? :slight_smile:

Silno o tom pochybujem, ak aj ano, tak pravdepodobne nie na LED na RB0. A co by to pomohlo?
Vas MCU je velmi pravdepodobne v poriadku, tak by ste ho tam napalil a fungovalo by to - a co teraz? Boli by sme na zaciatku.

Naozaj, skuste sem placnut cely kod, cely hex, co to generuje, schemu a obrazok zapojenia, inak sa daleko nedostaneme.

:arrow_right: administrator: příspěvek byl upraven
Předchozí příspěvky se necitují.

to me taky napadlo skusit to s jinym HEXem
v C

[code]
#include <16F74.h>
#FUSES XT
#FUSES NOWDT
#FUSES NOPROTECT
#DEVICE ADC=8 //10 bit
#use delay(clock=4000000)

void main ()
{
while (true)
{
OUTPUT_HIGH(PIN_B0);
delay_ms(500);
OUTPUT_LOW(PIN_B0);
delay_ms(500);
}
}
[/code]
HEX

:1000000000308A00182800002730840000080319F7
:1000100017280130A100A001A00B0C28A10B0B2870
:100020004A30A000A00B12281528800B09280034A4
:1000300084011F30830583161F149F141F1506109B
:10004000831206140230A600FA30A7000420A60B83
:10005000242883160610831206100230A600FA30F8
:0E006000A7000420A60B2F2883161F2863007C
:02400E00F13F80
:00000001FF
;PIC16F74

presne takle jak je ,tak mi funguje v simulatoru , a nalil sem to i do 16F873A a jedeto , no uvidime, co mas za programator ?

No myslel jsem, že když budu mít funkční kód vedle nefunkčního, vylučovací metodou dojdu k mé vytoužené chybě…

Nicméně ASM kompilace je zde:

[code]
_main:

;main.c,1 :: void main()
;main.c,3 :: while(1)
L_main0:
;main.c,5 :: PORTB = 0;
CLRF PORTB+0
;main.c,6 :: delay_ms(500);
MOVLW 3
MOVWF R11+0
MOVLW 138
MOVWF R12+0
MOVLW 85
MOVWF R13+0
L_main2:
DECFSZ R13+0, 1
GOTO L_main2
DECFSZ R12+0, 1
GOTO L_main2
DECFSZ R11+0, 1
GOTO L_main2
NOP
NOP
;main.c,7 :: PORTB = 0xFF ;
MOVLW 255
MOVWF PORTB+0
;main.c,8 :: delay_ms(500);
MOVLW 3
MOVWF R11+0
MOVLW 138
MOVWF R12+0
MOVLW 85
MOVWF R13+0
L_main3:
DECFSZ R13+0, 1
GOTO L_main3
DECFSZ R12+0, 1
GOTO L_main3
DECFSZ R11+0, 1
GOTO L_main3
NOP
NOP
;main.c,9 :: }
GOTO L_main0
;main.c,10 :: }
GOTO $+0
; end of _main[/code]

Ale ved v tom kode menite PORTB, ale TRIS je nedotknuty, co vyzera na iny zdrojak ako ten na zaciatku. To samozrejme s LED-kou blikat nemoze.
Inak ten vysledok kompilacie vyzera celkom dobre.
Pokial chcete blikat LED-kou, TRIS musi byt nulovy pre ten konkretny bit.

MiloPS3 - co používáš za prostředí?

Proč?
CCS C Compiler , ccsinfo.com/index.php , je to pridavek k MPLABu, pises a prekladas tam,

Ja uz jsem z toho jelen. Vemte to se mnou od zacatku. Mám MPLAB. Jaký (ať už FREE nebo WA*EZ plugin) compiler si k němu mám stáhnout? CCS je placený, pokud vím…

Jaromir, zkusil jsem tam pridat ten tris a porad nic :frowning:

Zkoušel jsi ten hex od mila?

mikroC je free jen do 2k tak to tady nikdo moc neužije ale již na počátku jsi byl dotazován zda ve staku vidíš zda trisB obsahuje nastavení že port je výstupní či ne ? A pak už jednou jsem tě upozornil že tato instrukce se i v manuálu k mikroC vyskytuje a dokonce je tam popis jak sní zacházet aby nebylo nutno ji volat pro případ že se mnění během chodu ten bit na vstupní a pak na výstupní . Závěr máš pořád a od počátku procesor v implicitním nastavení a portb je nastavení jako vstupní !A samotný zápis do portB nemá vliv na stav portu fizického .Jak tu bylo uvedeno mužeš použít již existující Cpompilátory pro mplab ty sice jako free-lite mají jistá omezení a efektivitu překladu ,ale v mplabu nedojde ke změně bitů v portuB při simulaci pokud je trisB pro daný bit nastaven jako vstupní !
A propo povipínej WDT a MCLR at ti to jede bez keců!

PS:omluvte pravopis dík

Hex od mila jsem zkoušel a bez úspěchu, takže to je pravděpodobně HW.

Přikládám schéma zapojení.

kondíky jsou 33p, předřadný rezistor je půl kila, X je 4.0MHz.

Edit: ve schématu chybí zapojení MCLR, ale je přes dvě kila na +5V
schema.jpg

Tu diodu máš opravdu jako na schématu? Ona totiž bude v závěrném směru až opravíš napájení - odjakživa je Vdd + a Vss - :wink:.

Sorry, napleskal jsem to do toho schématu asi za 20 vteřin hlava nehlava. Napájení je jak má a dioda svítí, takže je polarizována ok.