SchemaTheek
 
Home Nieuws Forum Schema's Artikelen Magazine Downloads Links Shops Zoeken
 
Controle Paneel
Gebruikersnaam
Wachtwoord
  Onthoud mij
» Wachtwoord?
» Registreren
Site info
» Het Team
» Contact
» FAQ
» Leden
» Upload Archief
Stats
Totaal online: 8
8 gasten
0 leden:
Forum > Digitaal > 16F628A vervangen door 16F887
Wil
Lid
Berichten: 29
Gepost op zondag 4 April 2010 12:59:56 QuoteWijzig

Heb het bussysteem van picbasic.nl nagebouwd voor bij mijn
modelspoorbaan, en bedien er al een paar maanden 2 wissels
mee en dit blijkt goed te werken.
Nu wou ik de toegepaste 16F628A vervangen door een 16F887
omdat ik dan meer ingangen beschikbaar heb om er meer
dingen mee te sturen.
Nu heb ik het programma minimaal aangepast, maar bijkt het
niet meer te werken.
De uitgangen zijn nog wel met een 16F628A.
Weet iemand hier of deze PIC's wel samen kunnen op een bus?

Gr.
Wil
Stynus
Admin
Berichten: 2704
Gepost op zondag 4 April 2010 13:09:09 QuoteWijzig

Normaal zou het moeten werken als je de juiste pic hebt aangeduid in picbais.

Heb je wel een extern kristal met de juiste condensatoren aangesloten? En een mclr pull-up weerstand?

Probeer eens een gewoon knipperledje, dan weet je of de pic werkt.


Met vriendelijke groet, Stynus ||| www.elektronicastynus.be
Wil
Lid
Berichten: 29
Gepost op zondag 4 April 2010 13:23:12 QuoteWijzig

Voorzover ik zie is alles goed, maar aangezien het niet werkt kijk
ik toch ergens overheen.
kristal is 16 mhz met 2 x 22pf, en de pullup aan de reset zit er
niet omdat deze in de config uit staat.
ik heb er ook al een led op gehad om te zien of hij wel start,
en dat doet ie ook.
ook heb ik de timeout verhoogd van 7 naar 9 msec. maar ook zonder
resultaat.
Zou het kunnen zijn dat er iets anders moet worden ingesteld
voor de USART?

Stynus
Admin
Berichten: 2704
Gepost op zondag 4 April 2010 13:32:46 QuoteWijzig

Dat zou kunnen, daarvoor moet je de datasheets eens nakijken.


Met vriendelijke groet, Stynus ||| www.elektronicastynus.be
Wil
Lid
Berichten: 29
Gepost op zondag 4 April 2010 13:51:01 QuoteWijzig

Die heb ik ook al zitten bekijken maar kan daar ook niet iets
vinden dat bij mij fout staat.
Hier even de code, mischien dat ik ergens overheen kijk wat
een ander wel opvalt.

ASM
CONFIG_REQ
__CONFIG _CONFIG1, HS_OSC & WDT_OFF & DEBUG_OFF & FCMEN_OFF & IESO_OFF & BOR_OFF & LVP_OFF & CPD_OFF & CP_OFF & MCLRE_OFF & PWRTE_ON
__CONFIG _CONFIG2, WRT_OFF & BOR21V
ENDASM

Device 16F887

XTAL 16
;Device 16F628A ;We gebruiken een 16F628A type
;Config HS_OSC, WDT_OFF, PWRTE_ON, LVP_OFF, BODEN_OFF, MCLRE_OFF

ALL_DIGITAL TRUE ;Alle ingangen digitaal
;XTAL = 16 ;Gebruik een kristal van 20MHz


Declare HSERIAL_BAUD = 2400 ;Transmissiesnelheid van de data over de bus
Declare HSERIAL_RCSTA = %10010000 ;Bit7:Enable serial port / Bit4:Continu ontvangen
Declare HSERIAL_TXSTA = %00000000 ;Bit5:Transmitpin uitgeschakeld (TXEN (Transmit ENable) = 0)
Declare HSERIAL_CLEAR = On

;INCLUDE "cIC programmasWoning_opdrachtnamen.inc"

;Logische constanten
Symbol HOOG = 1 ;Hoog niveau
Symbol LAAG = 0 ;Laag niveau

;Algemene constanten
Symbol Baud2400I = 16780 ;2400 Baud Inverted (baudrate voor SEROUT)

;Poortnamen
Symbol LED1 = PORTA.0
Symbol Toets1 = PORTB.0 ;Hierop een LED met serieweerstand aansluiten
Symbol Toets2 = PORTB.1
Symbol Toets3 = PORTB.2 ;Toets voor verzenden van een waarde over de bus
Symbol Toets4 = PORTB.3
Symbol SerieelIn = PORTC.7 ;Ontvangt via HSERIN data van de bus (B.1 = USART ingang, RX)
Symbol SerieelUit = PORTC.6 ;Stuurt via SEROUT data naar de bus (B.2 = USART uitgang, TX)

;Variabelen declareren
;BYTE
Dim Opdracht As Byte ;Bevat de laatst ontvangen opdrachtcode
Dim Waarde As Byte ;Eventueel retour gezonden waarde (zoals gemeten LDR waarde)

; 76543210
PORTA = %00000001 ;LED voor dit voorbeeld aanzetten (PIC opstart controle)
PORTB = %00000000 ;PORTB poorten laag
PORTC = %00000000
PORTD = %00000000
PORTE = %00000000
TRISA = %11111110 ;A.0 is uitgang voor de LED (in dit voorbeeld)
TRISB = %11111111 ;USART uitgang B.2 moet in rust hoog-ohmig zijn
TRISC = %11111111
TRISD = %11111111
TRISE = %11111111

;PORTb_PULLUPS On ;PORTB pull-ups geactiveerd voor de toets
Clear ;Wis alle RAM geheugen
DelayMS 500 ;Stabilisatie signalen en voorbeeld LED opstart tijd

LED1 = LAAG ;Zet LED van PIC opstart controle uit (poort LAAG maken)
;LED2 = LAAG

GoTo HoofdLus ;Spring over subroutine(s)



;SUBROUTINE(S)
ZendBus: ;De bus die door het huis loopt
RCSTA = %00000000 ;Zet USART uit, anders ontvangt deze zijn eigen verzonden data
SerOut SerieelUit, Baud2400I, [Opdracht, Waarde] ;Geinverteerd verzenden (vanwege BC547)
RCSTA = %10010000 ;Schakel USART weer in, zodat de PIC weer data kan ontvangen
Input SerieelUit ;Maak TX poort hoog-ohmig door er een ingang van te maken
Return



;HOOFDPROGRAMMA
HoofdLus:
Clear Opdracht ;Opdracht (na uitvoering) wissen
Clear Waarde ;Idem voor 'Waarde'

HSerIn 9, Verder, [Opdracht, Waarde] ;Time out staat op 7mSec
GoTo OpdrachtUitvoeren ;Voer opdracht uit
Verder: ;In het geval van een time-out van HSERIN, hier verder gaan


;WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
;Voorbeeld voor de picbasic.nl site (om te experimenteren, zelf uitbreiden)
;Onderstaand stukje staat dus niet in het programma bij mij thuis
If Toets1 = LAAG Then ;Als toets wordt ingedrukt, dan...
Opdracht = 26 ;Verzendt waarde 26 over de bus
GoSub ZendBus
DelayMS 20 ;Antidender voor indrukken van de toets
While Toets1 = LAAG : Wend ;Wacht tot toets wordt losgelaten, anders blijft hij zenden
DelayMS 20 ;Antidender voor loslaten van de toets
EndIf
If Toets2 = LAAG Then
Opdracht = 27
GoSub ZendBus
DelayMS 20
While Toets2 = LAAG : Wend
DelayMS 20
EndIf
If Toets3 = LAAG Then
Opdracht = 28
GoSub ZendBus
DelayMS 20
While Toets3 = LAAG : Wend
DelayMS 20
EndIf
If Toets4 = LAAG Then
Opdracht = 29
GoSub ZendBus
DelayMS 20
While Toets4 = LAAG : Wend
DelayMS 20
EndIf
;WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW


;Op deze plek staat bij mij in de 18F452 "semi-master PIC", een oneindige lus,
;waarin continu DCF77 tijd en temperatuur wordt bijgehouden en op display wordt weergegeven
;alsook de twee 74HC165 schuifregisters continu worden ingelezen (= 16 extra ingangen)
;alsook of er een IR opdracht van de afstandsbediening binnenkomt in keuken TSOP1736
;Komt er een opdracht binnen via 1 van deze inlezingen, dan GOTO OpdrachtUitvoeren, alwaar
;de opdracht (door een SELECT...CASE lijst) wordt afgehandeld
;Na OpdrachtUitvoeren springt het programma weer terug naar HoofdLus


;Op deze plek (buiten bovenste lus) staan timerfuncties, die 1x per minuut wordt doorlopen
;Dit gaat simpel met een SELECT...CASE lijst waarin alle tijden staan
;Als de tijd overeenkomt met een timerinstelling, wordt de bijbehorende opdracht uitgevoerd
;Daarna meteen weer terug naar HoofdLus, waar het programma weer wacht op een opdracht
GoTo HoofdLus


OpdrachtUitvoeren:
Select Opdracht ;Deze SELECT lijst bepaalt wat een ontvangen opdracht gaat doen
;Case 26 ;Als de waarde '26' is ontvangen van de bus, dan...
;LED1 = ~LED1 ;... de LED aan of uitzetten (togglen)

;Case 27
;LED2 = ~LED2
' CASE 120 ;Als waarde '120' is ontvangen, dan...
' LED = HOOG ;... de LED aanzetten (poort een HOOG niveau geven)

' CASE 121 ;Als waarde '121' is ontvangen, dan...
' LED = LAAG ;... de LED uitzetten (poort een LAAG niveau geven)

End Select
GoTo HoofdLus ;Ga weer naar de oneindige hoofdlus

Stynus
Admin
Berichten: 2704
Gepost op zondag 4 April 2010 13:55:17 QuoteWijzig

MCLRE_OFF dat kan niet bij die pic. misschien neemt hij de rest van de fuses daarom niet aan en staat de klok fout ingesteld.

Heb je een lcd scherm liggen? Als je dat eraanhangt kan je daarop zetten wat er binnenkomt (maakt het foutzoeken al meteen een stuk makkelijker).


Met vriendelijke groet, Stynus ||| www.elektronicastynus.be
Wil
Lid
Berichten: 29
Gepost op zondag 4 April 2010 14:03:15 QuoteWijzig

Ik wist niet dat de MCLRE niet op OFF kon bij deze PIC,
Het gaf ook geen foutmelding of waarschuwing.
Dit ga ik even veranderen en dan opnieuw proberen.
Anders zal ik er nog even een LCD display aanhangen
en daar tussentijds wat data heen sturen om te zien wat er gebeurd.

Stynus
Admin
Berichten: 2704
Gepost op zondag 4 April 2010 14:05:37 QuoteWijzig

Als je de fuses gewoon in picbasic ipv tussen asm had gezet dan had je daar wel een invalid fuse fout op gekregen.


Met vriendelijke groet, Stynus ||| www.elektronicastynus.be
Wil
Lid
Berichten: 29
Gepost op zondag 4 April 2010 15:20:12 QuoteWijzig

Die fuses in picbasic kreeg ik niet voor elkaar, vandaar deze oplossing.

ik heb net nog wat geprobeerd maar nu blijkt dat de pic konstant poort C6
hoog houd. Heb een ledje aangesloten tussen de bus en de 12v.
Hier zou in rust geen spanning mogen staan.
Dit vind ik wel vreemd omdat poort C6 in rust een ingang is.
Heb er ook nog een weerstand bij gehangen tussen C6 en de massa om te
voorkomen dat de transistor niet door een lekspanning word opengestuurd,
maar dit helpt ook al niet.
op poort A.0 heb ik ook een led zitten welke tijdens het opstarten even oplicht.
Dus het programma blijft niet hangen.

Wil
Lid
Berichten: 29
Gepost op zondag 4 April 2010 16:36:23 QuoteWijzig

Heb net de schakeling geprobeerd met een 16F877A en dit werkt wel!!
Echter weet ik ook niet hoe ik hier de fuses in moet stellen en heb
ze dan ook maar gewoon weggelaten.
Dit zal wel vreemd klinken maar alleen zonder fuses krijg ik de 877A
aan de praat.
Weet er mischien iemand hoe de fuses zouden moeten staan bij een 16F877A
en bij een 16F887?

Stynus
Admin
Berichten: 2704
Gepost op zondag 4 April 2010 17:03:25 QuoteWijzig

Dat heb ik nog al gehoord dat het alleen zonder werkt. Bij mij is het altijd net omgekeerd .

Hoe ik de fuses zet:
Config WDT_Off, PWRTE_ON, HS_OSC , PWRTE_ON, LVP_off


Met vriendelijke groet, Stynus ||| www.elektronicastynus.be
Wil
Lid
Berichten: 29
Gepost op zondag 4 April 2010 19:38:32 QuoteWijzig

Zou dit aan de software kunnen liggen of de programmer?

Zelf werk ik met proton vol versie, en pickit2.
Zal straks nog even proberen met bovengenoemde configregel.

Stynus
Admin
Berichten: 2704
Gepost op zondag 4 April 2010 20:03:20 QuoteWijzig

Ik gebruik de nieuwste beta van picbasic en ook een pickit2.

Als de fuses ontbreken dan gaat de prorgrammer die uit een default fuse lijst halen. Ik vermoed dat ik die al eens verandert heb om een hex file zonder fuses werkend te krijgen.


Met vriendelijke groet, Stynus ||| www.elektronicastynus.be
Baggeraar
Lid
Berichten: 1
Gepost op woensdag 12 April 2017 15:38:09 QuoteWijzig

Wat jammer dat bij dit soort problemen/vragen nooit de oplossing geplaatst wordt, want ik mag er hoop ik van uit gaan dat het werkend gekregen is na zoveel tijd.
Ik ben zelf ook begonnen met de les van picbasic en heb met veel bloed zweet en tranen de 887 draaiend gekregen door erg veel zoeken en weer proberen.
Ook bij mij staat de config tussen ASM en ENDASM, omdat het anders niet werkt.
De PIC zit echter op een tiental programwords na vol en ben op zoek naar serieel communicatie.
Daarom kwam ik hier.
Ik zag echter ook hier (het is dus niet alleen een afwijking van de heren bij C.O.) staan "staat in de databladen".
Wel vreselijk jammer.
Mensen die op een forum een vraag komen stellen doen dat omdat ze er verder niet uitkomen. Opmerkingen als RTFM of staat inde datasheets komen dan erg naar over.

Ik ga nog verder bladeren, want mijn usart in de PIC16F887 werkt ook niet.
grt Harm

Henk (NL)
Lid
Berichten: 263
Gepost op woensdag 12 April 2017 20:56:16 QuoteWijzig

Ik heb me in het verleden suf gezocht naar info/pdf van diverse dingen, waaronder ook PIC's

Heb al eens een 'MOVE' gemaakt van 628 via 877 naar 45K22, allemaal uitzoeken, en doorbijten.
Op het forum heeft niet iedereen tijd of I/O devices, danwel dezelfde PIC's in huis.
En bij mij is het niet anders, ik ben NIET in het bezit van 887.
Kan dus niets uitproberen..

Dus ik kan je niet anders verwijzen dan oa. naar de 'Databladen'
En onlangs mocht weer eens 'n 'mooie' PIC ontdekken, nergens info buiten de gangbare PDF. en dan ook nog de IOC uitzoeken hoe dat werkt, en voor de EERSTE keer, was dat best lastig!

Tsja, als iedereen alles had uitgezocht voor mij in het verleden, dan had ik 'NIETS' geleerd, toch?

Stynus
Admin
Berichten: 2704
Gepost op vrijdag 14 April 2017 22:17:36 QuoteWijzig

@Baggeraar
Ik (of de andere forum leden) hebben niet altijd tijd om in de datasheet te gaan zoeken, daarom verwijzen we door naar de datasheet.

Dat de eerste keer uitzoeken is dat idd best lastig, maar naarmate je meer ervaring krijgt wordt het steeds eenvoudiger. Het is vooral het leren lezen van de datasheet (weten waar op te letten).
Wat ook belangrijk is is rustig blijven, niet panikeren omdat je opeens 400pagina's voor je hebt liggen.

Als ik het antwoord zo weet geef ik dat ook (tenzij het een schoolvraag is, dan is eigen inzet een must).


Met vriendelijke groet, Stynus ||| www.elektronicastynus.be

Active Topics

» Subaru Outback 2016
» Frustratie China beste...
» D.I.Y. buggy 4x4 met B...
» Huisnummer verlichting...
» 70V 3A Labvoeding Upgrade
» buggy "The end"
» NTC-THERMISTOR vervangen?
» De tuin.
» 0-30V 0-6A labvoeding
» Wipschakelaar met neon...

» Meer actieve topics

Advertenties

ElektronicaStynus

© 2004-2017 SchemaTheek
Laadtijd: 0.07352 sec.