Modelspoormagazine forum

Modelspoor, praktijk => Modelspoor-elektronica met microcontrollers => Topic gestart door: raf op 21 december 2013, 09:55:11 AM

Titel: Analoog via PC aansturen
Bericht door: raf op 21 december 2013, 09:55:11 AM
hallo

een oud topic maar ik begin juist met pic prossesoren dus zit ik hier normaal goed

oude baan met electronica en sturing van 20 jaar geleden
1 pc (286)met win 95
en gwbasic omdat ik daar in heb leren programmeren

printerpoort als uitgang 8 bits
makkelijk en redelijk betrouwbaar

probleem is dat de pc op de vuilhoop ligt en er dus een nieuwe moet komen(laptop is reeds aan geschaft met ME als systeem er op)
printer sturing werkt maar de oude electronica er achter aan is een bende

principe van programma is eenvoudig een 8 maar eigenlijk een 6 bits sturing
de 2 andere gebruik ik om iets te doen

de 6 bits gebruik ik als adressering
bit 7 is het iets laten doen bit
en bit 8 is schakel bit van 2 naar 3 rail (gelijkstroom )en 3 rail is standaard

nu wil ik dus met die pic procesoren beginnen  omdat ik veel dezelfde schakelingen nodig heb en eens het programma klaar is is het eenvoudig om de printjes te maken en in elkaar te zetten

de detektie gebeurt via een toetsenbord en met readschakelaars op de baan die ik wil gaan vervangen door IR (schaduw station) en stroom detectie

wissels en trein besturing via de pc de beveiliging via de pic processoren

VB
pc wil een trein laten vertrekken en stuurt adres naar de bus
betreffende pic krijgt het signaal en wil de trein laten vertekken maar het voorliggende blok is bezet
de trein blijft wachten maar als het blok vrij is vertrekt de trein toch als nog
de achter liggende trein kan niet vertrekken voor het blok is vrij gegeven 
voorlopig gebruik id een 7 bits programatie omdat ik nu meer 3 rail dan 2 railloco's heb en ik moet ergens beginnen dus daarom een iets makkelijkere detectie en programatie


gedachte sturing
led uitgang is rood
een uitgang geeft signaal naar achter liggende pic(bezetmelding)
de pc geeft via de adres bus aan de pic opdracht om de trein te laten vertrekken
bezetmelding voor liggende blok is bezet
pic schakelt een led op oranje (zolang het voor liggende blok bezet is)
bij vrijgave blok gaat de led op groen
en een uitgang stuurt een 3055 zodat de trein kan gaan rijden

bij bedienen (bezetmelder)geeft de pic zijn bezet melding aan het achterliggende blok vrij
en zet zichzelf terug op rood (3055 niet bedient)
de led gaat terug op rood staan
pic wacht terug op bevel van de pc en monitort de adres bus


er is dus 1 ingang en dat is de voorliggende blok bezet melding
dan is er de adres bus (7 ingangen)
dan is er het set bit(bepaald wat er moet gebeuren)
uitgang led rood
uitgang led oranje
uitgang led groen
uitgang 3055 sturing
uitgang bezet melding blok

kan een pic dit aan ???
want mij ervaring met deze dingen is nul,nul
ik heb een programmer besteld
(http://i.ebayimg.com/00/s/NTAwWDUwMA==/z/EW0AAOxymxFRnL95/$T2eC16R,!yUE9s6NFG)+BRnL95,oE!~~60_12.JPG)
en hopelijk kan ik hier mee doen wat ik zou willen

dan iemand die mij wat op weg zou kunnen helpen wat programatie aan gaat
ik was een crack in Gwbasic dus dat zou wel vlotjes moeten lopen dacht ik

gr raf die zich nog wat gaat verdiepen in een pic

Titel: Re: Analoog via PC aansturen
Bericht door: Gerolf op 21 december 2013, 10:21:53 AM
Ik heb even van je vraag een apart topic gemaakt  ;)

Misschien is het een beetje zonde dat je die spullen al gekocht hebt.

Je opzet klinkt interessant, maar ik vrees dat je enkele problemen kan tegenkomen:
- een parallelle printerpoort ga je steeds moeilijker vinden.
- een microcontroller programmeren gaat meestal via USB (of RS232)
- er bestaan grofweg 2 grote soorten (fabrikanten) van microcontrollers: PIC (=microchip) en AVR (=Atmel)

Als je goed bent in Basic: Er bestaan programmeeromgevingen waarbij je in een soort van Basic schrijft, en je pakket vertaalt dit naar een programma dat de microcontroller begrijpt. Ik heb Bascom AVR, ik weet niet of er iets dergelijks voor PIC bestaat.

Je vraagt "kan een PIC dit aan ?" Er zijn véél types microcontrollers, binnen de twee "families".
... dus je zal allicht wel een PIC (of AVR) vinden die dat aankan. En je kan die dingen ook met elkaar laten overleggen  ;)

Het onderscheid tussen de verschillende types gaat over
- hoeveelheid geheugen (=programmageheugen, RAM, EPROM, ...)
- voedingsspanning, maximale kloksnelheid, energiezuinigheid, ...
- communicatiekanalen en -methodes (RS232, ISP, I2C, CAN, 1Wire, ...)
- aantal poorten en specifieke functies (timers en tellers, interrupts, ADC, ...)

Als ik jou was zou ik me eerst nog wat documenteren, dan een microcontrollerfamilie kiezen, dan een type (of enkele types), ...

Op dit forum zitten zowel mensen die vertrouwd zijn met PIC als met AVR
Titel: Re: Analoog via PC aansturen
Bericht door: Geert op 21 december 2013, 11:16:35 AM
Welkom in het fascinerende µC wereldje.

Maar ik vrees net zoals Gerolf dat je op je nieuwe laptop geen parallelle printer en een seriële RS232 poort meer zult vinden.

Je hebt blijkbaar al gekozen voor een PIC µC. Op zich geen slechte keuze, ik gebruik deze ook.  ;) PIC µC zijn redelijk krachtige µC, dus ik denk dat je wensen daar wel in geprogrammeerd geraken.

Voor de rest heeft Gerolf al veel gezegd (geschreven)

Het aanleren van µC heb ik gedaan via diverse cursussen op het net, maar dat was wel in assembler en een beetje C en wat JAL (via Peter (PeterC op dit forum))

Geert
Titel: Re: Analoog via PC aansturen
Bericht door: raf op 21 december 2013, 13:15:34 PM
hallo

eventjes over de laptop
dat is een oudje daarom draait er ook ME op omdat deze zo nog netjes de printerpoort aan spreekt
nieuwer dan ME heb je enorm problemen om de printerpoort vanuit basic aan te spreken
ik gebruik de poort als een 8 bits bus onder de baan
7 zijn voor het adres en 1 voor wat er moet gebeuren
dit werkt perfect met de oude materialen maar er zitten nogal veel relais onder die dus veel stroom verbruiken
er worden steeds 2 relais geschakeld als een soort van flipflop en dat gebruikt dus enorm veel stroom
ik heb eventjes een stukje geschreven in een programma (proton lite)
en het blijkt toch redelijk mee te vallen dacht ik
zie hier de bron code waar ik mee bezig geweest ben

Device 16F628A                ;Gebruik een 16F628A type
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
All_Digital TRUE              ;Alle ingangen digitaal

;adres bepaling van de chip
;                     76543210 ;geheugen steuntje voor de te setten bids
;schakel bit is 00000001
;hoe moet ik start als label instellen ?????                         ;label om procedure te starten
Symbol adresset =0
Symbol adres=0000001        ;adres =0000001  dit varieerd naargelang de pic gebruikt word
Symbol OFF  = 0               ;UIT
Symbol On   = 1               ;AAN


Symbol trein = PORTA.0         ;Poort A.0 heeft nu de naam trein
Symbol LEDrood = PORTA.1       ;Poort A.1 heeft nu de naam LEDrood
Symbol LEDoranje = PORTA.2     ;Poort A.2 heeft nu de naam LEDoranje
Symbol LEDgroen = PORTA.3      ;Poort A.3 heeft nu de naam LEDgroen
Symbol bezetmelder = PORTA.4   ;Poort A.4 heeft nu de naam bezetmelder   
Symbol bezetdetect = PORTA.5       ;Poort A.5 heeft nu de naam bezetdetect 
Symbol vrijgave = PORTA.6       ;Poort A.6 heeft nu de naam vrijgave
Symbol S1   = PORTB.0         ;Poort B.0 heeft nu de naam S1
Symbol S2   = PORTB.1         ;Poort B.1 heeft nu de naam S2
Symbol S3   = PORTB.2         ;Poort B.2 heeft nu de naam S3
Symbol S4  = PORTB.3        ;Poort B.3 heeft nu de naam S4
Symbol S5  = PORTB.4         ;Poort B.4 heeft nu de naam S5
Symbol S6  = PORTB.5         ;Poort B.5 heeft nu de naam S6
Symbol S7   = PORTB.6         ;Poort B.6 heeft nu de naam S7
Symbol SetBit=PORTB.7         ;Poort B.7 heeft nu de naam setbit



;                 76543210
PORTA = %11100000             
TRISA = %11100000             ;Alleen PORTA.0 - porta.4 als uitgang portA.5 word een bezetdetect porta.6 vrijgave
TRISB = %11111111             ;Dit zijn nu allemaal ingangen

PortB_Pullups On              ;On-chip pull-up weerstanden actief
Clear                         ;Wis alle RAM geheugen

While 1 = 1                   ;Oneindige lus
If bezetdetect = On Then trein =OFF   And LEDrood = On  And bezetmelder = On
If S1=0 And S2=0 And S3=0 And S4=0 And S5=0 And S6=0 And S7=1  Then adresset =0000001
If adresset = adres Then GoTo start
setbitbit =0
  Wend
 
;start procedure
start:
SetBit =1
If bezetdetect = On Then trein =OFF   And LEDoranje = On  And bezetmelder = On ;start secuentie gestart maar volg blok is bezet

If bezetdetect = OFF And SetBit=1 Then trein =On   And LEDgroen = On  And bezetmelder = On ;start secuentie gestart en trein begint te rijden blok blijft nog bezet
If vrijgave =0 Then LEDrood =1  And bezetmelder =OFF  And Wend ;trein is vertrokken en heeft vrijgave rail berijkt dus het blok is vrijvan obstakels
GoTo start


kan eventueel eens iemand kijken of dit kan werken aub

gr raf


 
 
Titel: Re: Analoog via PC aansturen
Bericht door: raf op 21 december 2013, 13:26:00 PM
hallo

der zit nog een fout in want ik detecteer het set bit niet
ik zet het wel terug op 0 en ook op 1 maar dit zonder detectie van het betreffende bit zelf
dus terug naar het ontwerp dan maar
er zal natuurlijk nog een betere manier zijn om de adres bus te detecteren maar dat gaat nu eventjes te ver

gr raf
Titel: Re: Analoog via PC aansturen
Bericht door: Gerolf op 22 december 2013, 09:48:41 AM
Ik zie dat je Basic nog steeds goed kent, en het ziet er logisch uit  :)

Toch heb ik de indruk dat je wil lopen voor je kan stappen
Heb je een pakket om dit programma in een microcontroller te steken, zodat hij het kan uitvoeren?

In Bascom AVR (Basic Compiler voor AtMel processoren) zou je een hoop foutmeldingen krijgen
Ik wil je echt aanraden om eerst op zoek te gaan naar een voor jou geschikte programmeeromgeving
Als je die gevonden hebt, en jezelf wat hebt geleerd om er mee om te gaan,
zal je zien dat je op verschillende manieren een oplossing voor je blokbeveiliging kan bereiken

Wat je relais en zo betreft: je weet waarschijnlijk wel dat een microcontroller niet krachtig genoeg is om die rechtstreeks aan te sturen, je zal (transistor-)eindtrapjes moeten maken.
Zorg ook voor een aparte voeding voor je microcontroller, zodat hij geen last heeft van de relais-schakelpulsen  ;)
Titel: Re: Analoog via PC aansturen
Bericht door: raf op 22 december 2013, 10:18:46 AM
hallo gerolf

mijn programmer is besteld (zie vorige posting)

mijn werk is voorlopig nog op ford en ik doe elektronica herstelling aan de wagens dus ik weet wel zo een beetje en ben niet echt een leek
het programmeren heb ik vroeger veel gedaan want ik heb zelf mijn  eigen computer in elkaar gesoldeerd op basis van de Z80 processoren
en dat was dus niet printjes steken maar de printjes zelf bouwen en geheugentjes stapelen
toen was er alleen de comodore 32 die in de handel te koop was en ik was reeds daar voor bezig dus ik draai reeds een lange tijd mee

het probleem is dat met de nieuwe ontwikkelingen men nu veel meer kan dan vroeger (die pic heeft meer geheugen dan mijn computer uit vervlogen tijden (1K))

als programmers gebruik ik proton of MPlab ide 8.00
proton vind ik makkelijker werken dus waarscheinlijk zal ik met dat programma verder gaan
mijn programma is reeds getest en het geeft geen fouten
dan bedoel ik dat er geen loops vast lopen of dat hij oneindig blijft wachten
zo op zich is het een niet te moeilijk programma maar gwbasic en dit is toch niet hetzelfde
met gwbasic kan ik naar regels springen en dat heb ik hier niet

een relais stuur ik aan met een BC 547 en de treinen met een tip145 of een 2N3055 welke meer dan voldoende zijn voor deze klus

ik vind het spijtig dat er hier niet veel programmatie getoond word en dat over program code ???? daar kun je geen claim op leggen want met een goto kun je nu  niet zoveel anders doen dan waar de bouwers van de code mee gedacht hebben
maar zoals reeds geschreven zullen er veel programmas zijn die wel werken maar met haken en ogen aan elkaar hangen
en de erro's onderdrukken das ook een manier om toch een werkbaar programma te hebben

bij mij is het de bedoeling om voor de blokken een progje te schrijven en een µp te programmeren en onder elk blok komt zo een printje(in de buurt van de adresbus)
voor de stations neemt de pc het over en het schaduw station (is een fifo )daar komt ook een progje voor geschreven en komt ook onder de baan
zo heb ik kleine overzichtelijke programmas in µp zitten en heb ik niet 1 groot programma
eens zien of ik het hoofd programma kan plaatsen zoals het er nu bij staat
maar das een hele brak basic code

gr raf
Titel: Re: Analoog via PC aansturen
Bericht door: raf op 22 december 2013, 10:37:26 AM
hallo

vreemd verschijnsel doet zich voor in bascom
ik krijg errors bij de check maar niet op programma maar op de text die ik heb toegevoegd

blijkbaar kent bascom de (;)funktie niet maar werkt mischien met (rem)als commando
dit is dan niet een fout in het programmeren maar gewoon een ander programma wat de programmatie niet verstaat
bascom zou wel eens alleen C verstaan en geen basic en dan is dus het programma waardeloos voor mijn toepassing

gr raf
Titel: Re: Analoog via PC aansturen
Bericht door: Gerolf op 22 december 2013, 10:44:42 AM
In Bascom gebruik je ' voor je begeleidende tekst  ;)
Bascom verstaat Basic, geen C. Maar er zijn verschillen tussen Bascom-Basic en bvb GWBasic ...

Maar bij mijn weten kan je met Bascom geen PIC-controller programmeren !
Titel: Re: Analoog via PC aansturen
Bericht door: raf op 22 december 2013, 11:00:25 AM
ik heb bascom avr ide

en daar kan je wel degelijk met F4 naar de pic schrijven maar via de paralellepoort
en dat is voor mijn programmer niet bruikbaar omdat die usb heeft
met F2 kan je een simulatie doen

ik ge gewoon proton blijven gebruiken want daar herken ik het meeste wat de basic aan gaat
hopelijk volgende week mijn programmer in de bus en kan ik beginnen met programmeren

een ledje laten pinken als programma vind ik absurd want ik heb knipper ledjes die dat zelf doen

maar er zitten inderdaad verschillen tussen proton en bascom
bij proton gebruik je ; voor je begeleidende text
Symbol trein = PORTA.0         ;Poort A.0 heeft nu de naam trein

en deze regel geeft helemaal geen foutmelding in proton maar in bascom wel
bascom werkt met dim als instructie en proton met symbol
dus twee verschillende talen mijn gedacht
maar het gaat goe komen ik voel dat aan mijn water hahahaha

gr raf
Titel: Re: Analoog via PC aansturen
Bericht door: argilla op 22 december 2013, 11:02:13 AM
Citaat van: Gerolf op 22 december 2013, 10:44:42 AM
In Bascom gebruik je ' voor je begeleidende tekst  ;)
Bascom verstaat Basic, geen C. Maar er zijn verschillen tussen Bascom-Basic en bvb GWBasic ...

Maar bij mijn weten kan je met Bascom geen PIC-controller programmeren !


Gerolf Basic en GW basic dat is toch die taal van de VIC 20 de C64 en ZX81 toch.....bedoel  IF....THAN en GO TO...... PEEK and POKE


of vergis ik mij ? destijds werden die programmas over de radio verstuurd naar de gebruikers.
Wist niet dat het nog in gebruik was als programmeer taal.
Titel: Re: Analoog via PC aansturen
Bericht door: Geert op 22 december 2013, 11:07:47 AM
Ik kan je niet helpen met Basic, zoals hiervoor al aangehaald ik programmeer vooral in assembler en soms in C.

Ik lees dat je goed op de hoogte bent van auto elektronica, dan is de CAN bus je zeker niet vreemd. Je weet toch dat er PIC µC zijn met ingebakken CAN bussen. Mogelijk kan je daar iets mee doen met je ervaring daarin als communicatie middel...

Mogelijk toch is overwegen om over te schakelen naar C, en waarom niet in assembler, als je zelfs in het verleden een PC ineen soldeerde.

Citaat van: raf op 22 december 2013, 10:18:46 AM
ik vind het spijtig dat er hier niet veel programmatie getoond word en dat over program code ????

Ik geef mijn code meestal wel vrij op dit forum of op mijn site, stel nu eens dat ik dit niet doe en morgen (hopelijk niet) dood val, zo heeft er niemand er iets aan.  :D

(werkt je punt op je toetsenbord soms niet? het is niet belangrijk, maar stoort me wel...)

Geert
Titel: Re: Analoog via PC aansturen
Bericht door: Gerolf op 22 december 2013, 11:36:27 AM
@Argilla: Basic bestaat nog steeds, hoor, maar is geëvolueerd in verschillende richtingen.
Visual Basic is bijvoorbeeld een object-georiënteerde programmeertaal

Citaat van: raf op 22 december 2013, 11:00:25 AMmaar er zitten inderdaad verschillen tussen proton en bascom
bij proton gebruik je ; voor je begeleidende text
Symbol trein = PORTA.0         ;Poort A.0 heeft nu de naam trein
bascom werkt met dim als instructie en proton met symbol

Ik denk dat er veel verschillen zijn, ja  :)
In Bascom gebruik je bvb "trein alias porta.0" als je iets een handigere (interne) naam wil geven
Dim dient om geheugenruimte voor variabelen te reserveren: dim bf as byte, wf as word, wg as word, if as integer, ...
Const pi=3.1415926535 dient dan weer om een waarde niet telkens te hoeven herhalen

labels zijn namen, afgesloten met ":" - zoals "MijnLabel25:" en die kan je gebruiken om naar te springen met goto of gosub

Als je Bascom avr ide hebt, heb je ook de helpfile. Daarin staan "language fundamentals" en "language reference"

Maar nogmaals: volgens mij kan je met Bascom geen PIC, maar alleen Atmels programmeren.
Bascom ondersteund trouwens ook 2 chips met CAN:
de AT90CAN32 en AT90CAN128 (het laatste getal is de hoeveelheid programmageheugen in kbyte)
Titel: Re: Analoog via PC aansturen
Bericht door: raf op 22 december 2013, 18:09:37 PM
Hallo

Ik heb dus proton om mee te werken en daar kan ik dus wel mee programeren (.) kijk het werkt wel.
dat ik basic gebruik is gewoon om dat er zoveel talen zijn dat ik met deze gewoon was om mee te werken.
je vergeet pascal ,c+ , c++ ,comordore basic ,COBOL, Algol,  Fortran,  Java, SQL , Progress, 4GL,Prolog.,en zo zijn er nog wel wat.
heel de machine taal van de Z80 is nu ook niet eenvoudig om mee te werken.
al kende ik er wel ongeveer 80% van toen in de tijd.
en ja we konden zelfs over een 27 Mhz bakje code versturen over heel de wereld als het moest en het werkte nog goed ook.
de processoren die we gebuikte die haalde we in een legerstock die raketten had opgekocht .
die in de winkel waren 4 Mhz en die militaire waren 18 Mhz wat een heel verschil maakte
maar dat is nostalgie en daar kijk ik dus wel graag naar terug want het was een leerrijke tijd maar daar kom ik dus nu niet verder mee.

ik moet nu wachten tot de processoren binnen zijn en de programmer voor ik verder kan en dan zien of het werkt.

en sorry nog eens voor dat puntje maar op andere forums zijn der die in verkorte woordjes typen en dat is nog veel ergerlijker.
dus  W8 .

gr raf en hop naar het volgende programmatje.


Titel: Re: Analoog via PC aansturen
Bericht door: Geert op 22 december 2013, 18:29:59 PM
Goe bezig Raf, nu nog elke zin beginnen met een hoofdletter  ;)

Je moet wel rekening houden, dat je op je PIC-programmer niet elke type µC kan programmeren. Ik heb even op het internet gekeken naar je programmer, en deze kan heel wat µC niet programmeren, die ik nu bijvoorbeeld wel gebruik op een andere programmer.

Dus, kijk eerst maar eens naar deze lijst voor je PIC µC besteld...



Geert
Titel: Re: Analoog via PC aansturen
Bericht door: raf op 22 december 2013, 19:03:40 PM
Het groot dictee is wel door een belg gewonnen maar das een ander forum.

wat de te programeren pic aan gaat.

10 Series: PIC10F200 * PIC10F202 * PIC10F204 * PIC10F206 *
PIC10F220 * PIC10F222 *
12C Series:
PIC12C508 PIC12C508A PIC12C509 PIC12C509A
PIC12C671 PIC12C672 PIC12CE518 PIC12CE519
PIC12CE673 PIC12CE674
12F Series:
PIC12F508 PIC12F509 PIC12F629 PIC12F635
PIC12F675 PIC12F683
16C Series:
PIC16C505 PIC16C554 PIC16C558 PIC16C61
PIC16C62 PIC16C62A PIC16C62B PIC16C63
PIC16C63A PIC 16C64 PIC16C64A PIC16C65
PIC16C65A PIC16C65B PIC16C66 PIC16C66A
PIC16C67 PIC16C620 PIC16C620A PIC16C621
PIC16C621A PIC16C622 PIC16C622A PIC16C71
PIC16C71A PIC16C72 PIC16C72A PIC16C73
PIC16C73A PIC16C73B PIC16C74 PIC16C74A
PIC16C74B PIC16C76 PIC16C77 PIC16C710
PIC16C711 PIC16C712 PIC16C716 PIC16C745
PIC16C765 PIC16C773 PIC16C774 PIC16C83
PIC16C84
16F Series: PIC16F505 PIC16F506 PIC16F54 PIC16F57 *
PIC16F59 * PIC16F627 PIC16LF627A PIC16F627A
PIC16F628 PIC16LF628A PIC16F628A PIC16F630
PIC16F631 PIC16F631-1 PIC16F636 PIC16F636-1
PIC16F639 * PIC16F639-1 * PIC16F648A PIC16F676
PIC16F677 PIC16F677-1 PIC16F684 PIC16F685 *
PIC16F685-1 * PIC16F687 * PIC16F687 *- 1 PIC16F688
PIC16F689 * PIC16F689-1 * PIC16F690 * PIC16F690-1 *
PIC16F716 PIC16F72 PIC16F73 PIC16F74
PIC16F76 PIC16F77 PIC16F737 PIC16F747
PIC16F767 PIC16F777 PIC16F83 PIC16F84
PIC16F84A PIC16F87 PIC16F88 PIC16F818
PIC16F819 PIC16F870 PIC16F871 PIC16F872
PIC16F873 PIC16F873A PIC16LF873A PIC16F874
PIC16F874A PIC16F876 PIC16F876A PIC16F877
PIC16F877A
18 Series: PIC18F242 PIC18F248 PIC18F252 PIC18F258 PIC18F442 PIC18F448
PIC18F452 PIC18F458 PIC18F1220 PIC18F1320 PIC18F2220 PIC18F2320
PIC18F2321 PIC18F4210 PIC18F2331 PIC18F2450 PIC18F2455 PIC18F2480
PIC18F2510 PIC18F2515 PIC18F2520 PIC18F2525 PIC18F2550 PIC18F2580
PIC18F2585 PIC18F2610 PIC18F2620 PIC18F2680 PIC18F4220 PIC18F4320
PIC18F6525 PIC18F6621 PIC18F8525 PIC18F8621 PIC18F2331 PIC18F2431
PIC18F4331 PIC18F4431 PIC18F2455 PIC18F2550 PIC18F4455 PIC18F4550
PIC18F4580 PIC18F2580 PIC18F2420 PIC18F2520 PIC18F2620 PIC18F6520
PIC18F6620 PIC18F6720 PIC18F6585 PIC18F6680 PIC18F8585 PIC18F8680

en de pic 16F628A staat daar wel degelijk tussen.
als ik met deze serie's die hier voorgesteld worden niet ga toekomen voor mijn treinbaan dan weet ik het niet meer.
veel groter als deze ga ik niet nodig hebben denk ik .
eerst maar eens zien of ik er eentje aan het werk krijg.
als het goed is komen er deze week 20 binnen aan 2 euro per stuk.

ik ga ongeveer als het goed is 3 a 4 verschillende programma's moeten schrijven om heel mijn baan te kunnen sturen.
gr raf
Titel: Re: Analoog via PC aansturen
Bericht door: raf op 22 december 2013, 20:29:10 PM
Hallo

Dit zou een eenvoudig signaal moeten zijn.
Fouten zitten er niet meer in maar of het werkt is een andere vraag.

Device 16F628A                ;Gebruik een 16F628A type
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
All_Digital TRUE              ;Alle ingangen digitaal

;adres bepaling van de chip
;                     76543210 ;geheugen steuntje voor de te setten bids
;schakel bit is 00000001
;hoe moet ik start als label instellen ?????                         ;label om procedure te starten
dim vrij as byte
dim bezet as byte

Symbol OFF  = 0               ;UIT
Symbol On   = 1               ;AAN
Symbol trein = PORTA.0         ;Poort A.0 heeft nu de naam trein
Symbol LEDrood = PORTA.1       ;Poort A.1 heeft nu de naam LEDrood
Symbol LEDoranje = PORTA.2     ;Poort A.2 heeft nu de naam LEDoranje
Symbol LEDgroen = PORTA.3      ;Poort A.3 heeft nu de naam LEDgroen
Symbol bezetmelder = PORTA.4   ;Poort A.4 heeft nu de naam bezetmelder   
Symbol bezetdetect = PORTA.5       ;Poort A.5 heeft nu de naam bezetdetect 
Symbol vrijgave = PORTA.6       ;Poort A.6 heeft nu de naam vrijgave


PORTA = %11100000             
TRISA = %11100000             ;Alleen PORTA.0 - porta.4 als uitgang portA.5 word een bezetdetect porta.6 vrijgave
TRISB = %11111111             ;Dit zijn nu allemaal ingangen

PortB_Pullups On              ;On-chip pull-up weerstanden actief
Clear                         ;Wis alle RAM geheugen
begin:
While 1 = 1  ;Oneindige lus
trein =off
if bezetdetect = on then bezet = on       ;bezet detect komt van het vorige signaal en is een zeer lange puls
if vrijgave = on then vrij = on         ;vrijgave is een korte puls van een reedrelais
bezetmelder = on
if vrij = on and bezet = on then goto start
ledrood =on
ledoranje = off
ledgroen =off
wend

start:
ledrood =off
ledgroen =on
ledoranje = off         ;deze kan veranderd worden bij wissel rond of station ingang
trein =on
vrij = off
goto begin

gr raf
Titel: Re: Analoog via PC aansturen
Bericht door: raf op 01 januari 2014, 19:50:01 PM
Hallo

De processoren zijn binnen .
(https://scontent-b-ams.xx.fbcdn.net/hphotos-frc3/1499484_673251026060383_2100931075_n.jpg)
Nu nog wachten op de programmer.

gr raf
Titel: Re: Analoog via PC aansturen
Bericht door: raf op 17 januari 2014, 18:08:19 PM
Hallo

Programmer is binnen en ik ben er reeds mee aan het stoeien geweest.
1 transistor is al hemelen maar gelukkig had ik er een paar meer meegebracht.
Nu proberen straks als de accu's zijn opgeladen of alles werkt zoals ik gedacht had.
Het aan elkaar knopen van de beide printen gaat ofwel werken  of er komt rook uit en der snurkt weer wat op.

Het probleem is dat ik met twee verschillende spanningen zit te werken
Namelijk de stuur spanning (5 volt)en de gestuurde spanning (14 volt).
En om dat aan elkaar te krijgen ??? maar we zien wel wat er gebeurt.

gr raf
Titel: Re: Analoog via PC aansturen
Bericht door: Sattrickske op 17 januari 2014, 23:38:03 PM
Citaat van: raf op 17 januari 2014, 18:08:19 PM
Het probleem is dat ik met twee verschillende spanningen zit te werken
Namelijk de stuur spanning (5 volt)en de gestuurde spanning (14 volt).
En om dat aan elkaar te krijgen ??? maar we zien wel wat er gebeurt.
Afhankelijk van de toepassing, schakelen met een transistor of MOSfet, of met een darlington array (ULN2003 bv).  Zoek maar eens op het Internet achter 'transistor as switch', voorbeeldjes genoeg...
Titel: Re: Analoog via PC aansturen
Bericht door: raf op 18 januari 2014, 07:45:10 AM
Hallo Patrick

Het probleem is dat ik een 20 à 30 schakelingen heb die met een 2N3055 werken en de eindtrappen wil ik her gebruiken.
Ik stap dus gedeeltelijk af van mijn eigen 30 jaar oude ontwerp en ga nu voor de pic sturing.
Maar omdat ik geleidelijk wil ombouwen (ik wil blijven rijden en bouwen)gaan de twee systemen door elkaar gebruikt worden.
Dat gaat door middel van optocoupels redelijk lukken.
Ik moet het pwm signaal in de pic wel verkrachten maar op gebied van software lukt dat wel.
Nu bezig met het schrijven van de software en das ook nie gemakkelijk.
(https://scontent-b-ams.xx.fbcdn.net/hphotos-prn1/t1/q71/s720x720/1017314_682671608451658_1456788745_n.jpg)
Dit zou de sturing moeten worden.
de basis van Q3 ligt aan de 12 volt want das niet goed te zien.
over Q2 (eerste tor na de pic)Ben ik nog niet zeker of ik het met een BC 547 ga doen of wel een optocouple nemen.
het zou kunnen dat er 12 volt terug vloeit naar de 5 volt maar ik ben niet zeker.
ik kan het software matig niet testen omdat in het programma dat ik gebruik de 2n3055 niet voor komt en in het andere zit de pic niet.

Dus de vraag gaat het met een opto werken ????of is de schakeling zoals ze nu op papier staat werkbaar.

Gr raf 
Titel: Re: Analoog via PC aansturen
Bericht door: Sattrickske op 18 januari 2014, 09:21:54 AM
De schakeling werkt wel, maar is wat overkill (2 transistoren + 1 darlington).  Maar zoals je al zei, je wil een oude schakeling herbruiken...  De transistor die je hebt toegevoegd om je PIC te koppelen aan je oude schakeling is niet echt nodig.  Als je darlington schakelt bij een spanning die laag genoeg is, kan je gewoon met weerstand deler werken.  Dat zal je effe moeten uittesten...

Als je later ooit nieuwe maakt, is één darlington of mosfet meer dan voldoende.

In jouw schakeling (ook mijn nieuwe versie trouwens) kan er alleen 12V terugvloeien naar de 5V of naar de PIC wanneer er één van jouw transistoren sneuvelt (CE fusie voor de laatste of BC fusie voor de eerste).  Als ze doorbranden is er niks aan de hand, je schakeling werkt dan wel niet meer, maar de rest van je elektronica blijft intact.  De kans dat zo'n fusie optreedrt waarbij 12V terugstroomt is echter relatief klein; ik heb het enkel meegemaakt wanneer de transistor al stuk was bij het monteren.
Om 100% safe te spelen kan je inderdaad een optocoupler gebruiken.
Titel: Re: Analoog via PC aansturen
Bericht door: raf op 19 januari 2014, 00:22:47 AM
Hallo Patrick

Ja ooit komen er nieuwe want de baan word nog uitgebijt dus er komen nieuwe sturingen.
Een transistor van een paar cent om toch het gedeelte oude schakelingen te hergebruiken vind ik niet erg.
Er moeten toch printjes voor de pic processoren gebouwd worden en dan kan die darlington er gewoon mee op.
De verbinding met de twee andere torren doe ik dan met een draadje omdat de 3055 toch op een koelplaat zit samen met de tip 190 (dacht ik)
Van de week eens uitproberen of het gaat werken en dan hoor je het wel.
Gr raf
Titel: Re: Analoog via PC aansturen
Bericht door: conducteur op 19 januari 2014, 10:42:28 AM
R3, wat doet die? Lijkt me een vreemde plaats voor een weerstand?
Titel: Re: Analoog via PC aansturen
Bericht door: raf op 19 januari 2014, 13:06:06 PM
Hallo

R3 is 1 ohm en die staat daar als er een kortsluiting optreed dan werkt die de spanning weg in warmte
das een dikke weerstand met zo een veertje aan de binnen kant.
blijft de kortsluiting te lang dan desoldeerd dat veertje en gaat er niet meer kapot

gr raf
Titel: Re: Analoog via PC aansturen
Bericht door: patrick smout op 19 januari 2014, 13:57:03 PM
Citaat van: Sattrickske op 18 januari 2014, 09:21:54 AM
...  De transistor die je hebt toegevoegd om je PIC te koppelen aan je oude schakeling is niet echt nodig.  Als je darlington schakelt bij een spanning die laag genoeg is, kan je gewoon met weerstand deler werken.  Dat zal je effe moeten uittesten...
Zoals de schaking nu opgebouwd is zal dit enkel werken als de uitgang van de PIC een open collector heeft. Bij totem-paal uitgang krijg je de darlington nooit volledig open gestuurd.

Citaat van: Sattrickske op 18 januari 2014, 09:21:54 AM
Om 100% safe te spelen kan je inderdaad een optocoupler gebruiken.
Beschermen van de stuurschakling tegen een eindtrap die doorslaat kan ook anders. Rechtstreeks op de uitgang van de PIC een diode naar GND en +5V en een weerstand in serie met de uitgang naar de driver. De diodes voorkomen overspanning op de uitgang naar 0/5V, de weerstand begrenst de stroom in het geval van overstroom. 

mvg,

Patrick Smout
Titel: Re: Analoog via PC aansturen
Bericht door: raf op 19 januari 2014, 14:46:29 PM
Hallo

poort RA.4 is een open drain output.

kan deze gebruikt worden ???
gr raf
Titel: Re: Analoog via PC aansturen
Bericht door: patrick smout op 20 januari 2014, 20:54:29 PM
Raf,

als ik het zo even bekijk op het interne schema van de IO pin dan twijfel ik eraan of het zonder de transistor kan. De interne diodes op de IO pin gooien roet in het eten waardoor de basis van Q3 nooit hoger komt dan 5V+0,3V.
Als gevolg hiervan zal je de uitgang nooit helemaal kunnen opensturen (max. 5V+0,3V - 3*0,6V)

Ben jij overigens helemaal zeker dat de collector van Q3 naar de +5V gaat?

mvg,

patrick Smout
Titel: Re: Analoog via PC aansturen
Bericht door: Geert op 20 januari 2014, 21:46:11 PM
In-uitgang  pinnen  van een PIC µC zijn stevige dingen. Er zit al redelijk wat beveiliging ingebouwd. Ik stuur er zelfs rechtstreeks triacs via een R mee aan om 220V te schakelen. Toch ooit is eens misgegaan toen ik 220V op zulke pin zette. (wat niet de bedoeling was hé)  Maar enkel deze uitgang kon ik niet meer gebruiken, de rest werkte gewoon door zoals ervoor.

Geert
Titel: Re: Analoog via PC aansturen
Bericht door: raf op 20 januari 2014, 22:06:17 PM
Hallo Patrick

Ik heb al lang gezien dat ik problemen ga hebben en krijgen met de oude transistoren terug te gaan gebruiken.
Ik kan twee dingen doen en de oplossing is verschillend.
Oplossing 1 is de polariteit van de baan omdraaien zodat de + op de rails komt te staan en de massa op de midden rail.
Voordeel is dat ik met de massa kan schakelen en de oude transistoren kan gebruiken zonder al te veel te moeten om bouwen aan de printjes.
Nadeel is dat ik alle led bezet melders moet desolderen en van polariteit wisselen en dat zijn er veel.
(https://scontent-a-ams.xx.fbcdn.net/hphotos-prn2/t31/1487684_674198742632278_875477069_o.jpg)
Dit is een gedeelte er van maar over heel de lengte zitten zulke bedienings panelen met led's en schakelaars.
Dit zou dan allemaal moeten omgebouwd worden wat polariteit aan gaat.
Dan kan ik ook nieuwe stuur printen maken .
(http://www.modelbouwforum.nl/forums/members/ernst-grundmann-albums-van-alles-en-nogwat-picture177554-p-fet.jpg).
en de oude proberen om te bouwen zodat ik er mijn wissel spoelen mee kan schakelen.
Maar das dan over kill met die transistoren om een speol die 2 amp trekt met een tor van 10 amp te schakelen.
Maar dan zijn ze niet verloren en worden ze her gebruikt.
Maar dan moet ik de optocoupels naar massa laten schakelen omdat de pic's graag naar massa schakelen maar ik dank dat dit dus wel kan lukken.
als er dan geen gelijkstroom loco's gaan achteruit rijden want dan moeten die ook nog allemaal omgebouwd worden.
Ik weet niet  wat de printjes in die machines gaan doen ????
normaal zijn ze voor wissel stroom maar nu lopen ze ook op gelijk stroom en dat loopt dus ook.
Het kan zijn dat ik niets moet doen behalve signaal geven dat ze anders om moeten rijden .

Gr raf
Titel: Re: Analoog via PC aansturen
Bericht door: Sattrickske op 21 januari 2014, 09:11:00 AM
OK, nu zie ik inderdaad de 'omvang' van je probleem.  Je kan inderdaad veel beter proberen je bestaande schakelingen aan te passen zodat je niet je hele baan hoeft om te bouwen.  Het moet perfect mogelijk zijn om je bestaande elektronica te interfacen met je PIC.  Kwestie van goed uit te kijken welke ingangsignalen de 'oude' elektronica verwacht en ervoor te zorgen dat je nieuwe elektronica deze netjes aflevert...

Wat je schakelen naar massa betreft (juiste term is 'sinking'), moet je eens kijken naar de datasheet van je PIC (of andere µC).  De meeste µC verkiezen inderdaad sinking boven sourcing (=schakelen naar Vdd, waarbij de µC de 'spanning' en dus ook de stroom levert).  Jouw PIC16F628A (ik gebruik 'm zelf ook, dus ken ik 'm redelijk goed) heeft source=sink=25mA per pin (met een max. van 200mA over alle poorten) (p.133 van de datasheet, electrical specifications).  Dus voor deze maakt 't niet uit of je sinking of sourcing toepast.  Beiden zijn meer dan voldoende om de meeste optocouplers mee aan te sturen, zelfs in source mode).

Als je meer stroom/spanning nodig hebt, een transistor/mosfet ipv een optocoupler en je kan verder.  Heb je er meerdere nodig zoals in jouw geval, kijk dan eens naar een ULN2003 (een simpele NPN-array).  Als ik jou was zou ik gaan voor zo'n ULN2003 ipv. optocouplers en je 'oude' elektronica rechtstreeks daarmee aansturen.

Experimenteer eerst een beetje met zo'n prototyping bordje, waarbij je zelf de 0V/5V schakelt via een stom draadje.  Da's te eenvoudigste manier om na te gaan of je schakeling kan werken met een PIC ipv. stom draadje.  Wel opletten met interne pull-ups en open drain configs van sommige PIC pinnetjes.
Titel: Re: Analoog via PC aansturen
Bericht door: raf op 21 januari 2014, 10:29:13 AM
Hallo Patrick.

Ik heb de keuze gemaakt gisteren en ga toch voor de ombouw .
het gaat veel werk zijn om alles om te solderen maar dan ben ik van de ellende vanaf.

de optrek en rem programma's zijn klaar en reeds getest en ze werken ook zoals ik het denk dat het zou moeten.
een blok bestaat bij mij uit twee gedeelten en er zijn 3 pic's voor nodig om 1 blok te sturen

een afrem pic met dit programma
Device 16F628A               ; processor type 12F629

XTAL 4                     

Config INTRC_OSC_NOCLKOUT,_  ; Interne oscilator aan
       WDT_OFF,_             ; WatchDog Timer uit
       PWRTE_ON,_            ; Power-up Timer Enable aan
       MCLRE_ON,_            ; Externe Master Reset Enable aan
       BODEN_OFF,_           ; Brown Out Detectie Enable uit
       LVP_OFF,_             ; Low-Voltage Programming uit
       CP_ON                 ; Code Protection aan

ALL_DIGITAL TRUE             ; Alle poorten digitaal

Symbol sw_1  = PORTB.0       ; Sw_1 op poort B.0
Symbol sw_2  = PORTB.1       ; Sw_2 op poort B.1
Symbol SW_3  = PORTB.2        ;Sw_3 op poort B.2
Symbol frequentie = 2000     ; Frequentie pwm signaal

Declare CCP1_PIN PORTB.3     ; PWM op poort B.3

Dim waarde  As Word          ; Variabele waarde pwm

Clear                        ; Wis alle ram geheugen

DelayMS 500                  ; Stabilisering 0.5_sec

        ;76543210            ; Hulpregel Poort poort_B
PORTB = %00000000            ; Zet poort_B laag
TRISB = %00000111            ; Poort_B als uitgang  van 0-2 ingang

        ;76543210            ; Hulpregel Poort poort_A
PORTA = %00000000            ; Zet poort_A laag
TRISA = %11111111            ; Poort_A als ingang

start:                         ; Begin start
If sw_1 = 0 And sw_2 = 0 Then   ;steeds beginnen met waarde 255 max pwm
waarde =255                       
EndIf
   
    If sw_1 = 1 Then         ; Als waar dan
     Dec waarde              ; Waarde - 1
      If waarde <10 Then   ; Als waarde kleiner dan
       waarde = 10          ; Waarde is 10
      EndIf                  ; Einde als
    EndIf                    ; Einde als

    If sw_2 = 1  Then         ; Als waar dan
      waarde  =0              ; Waarde =0
        EndIf               ; Einde als
    If SW_3 = 0 Then
    waarde = 255          ;dit is de vrijgave om door te rijden
     EndIf   
    DelayMS 10               ; Pauze 0.1 sec
    HPWM 1,waarde,frequentie ; Led_1 op poort B.3 (PWM)
GoTo start                   ; Ga naar begin start

End                          ; Einde programma
dan een optrek pic
Device 16F628A               ; processor type 12F629

XTAL 4                     

Config INTRC_OSC_NOCLKOUT,_  ; Interne oscilator aan
       WDT_OFF,_             ; WatchDog Timer uit
       PWRTE_ON,_            ; Power-up Timer Enable aan
       MCLRE_ON,_            ; Externe Master Reset Enable aan
       BODEN_OFF,_           ; Brown Out Detectie Enable uit
       LVP_OFF,_             ; Low-Voltage Programming uit
       CP_ON                 ; Code Protection aan

ALL_DIGITAL TRUE             ; Alle poorten digitaal

Symbol sw_1  = PORTB.0       ; Sw_1 op poort B.0
Symbol sw_2  = PORTB.1       ; Sw_2 op poort B.1
Symbol SW_3  = PORTB.2        ;Sw_3 op poort B.2   vrijgave

Declare CCP1_PIN PORTB.3     ; PWM op poort B.3

Dim waarde  As Word          ; Variabele waarde pwm

Clear                        ; Wis alle ram geheugen

DelayMS 500                  ; Stabilisering 0.5_sec

        ;76543210            ; Hulpregel Poort poort_B
PORTB = %00000000            ; Zet poort_B laag
TRISB = %00000111            ; Poort_B als uitgang

        ;76543210            ; Hulpregel Poort poort_A
PORTA = %00000000            ; Zet poort_A laag
TRISA = %11111111            ; Poort_A als ingang

start:
                        ; Begin start
If sw_1 = 0 And sw_2 = 0 Then   ;steeds beginnen met waarde 255 max pwm
waarde =0                     
EndIf
   If sw_1 = 1 Then         ; Als waar dan
     inc waarde              ; Waarde + 1
      If waarde >254 Then   ; Als waarde groter dan
       waarde = 255          ; Waarde is 255
      EndIf                  ; Einde als
      endif
    If sw_2 = 1  Then         ; Als waar dan
      waarde  =0              ; Waarde =0
        EndIf               ; Einde als
   
   
     
      If SW_3 = 0 Then
    waarde = 255          ;dit is de vrijgave om door te rijden
    endif
    DelayMS 10               ; Pauze 0.1 sec
   
    HPWM 1,waarde,2000       ; Led_1 op poort B.3 (PWM)
GoTo start                   ; Ga naar begin start

End                          ; Einde programma

en dan het signaal op zich zelf die dan wel weer de optrek module vrijgeeft.
Device 16F628A               ; processor type 12F628a               

Config INTRC_OSC_NOCLKOUT,WDT_OFF,PWRTE_ON,MCLRE_ON,BODEN_OFF,LVP_OFF,CP_ON 

ALL_DIGITAL TRUE             ; Alle poorten digitaal

Symbol vrijgave  = PORTB.0       ; Sw_1 op poort B.0 vrijgave
Symbol stationchef  = PORTB.1       ; Sw_2 op poort B.1 van stationchef
Symbol bezetmelding  = PORTB.2        ;Sw_3 op poort B.2 bezetmelder
symbol rood = porta.0
symbol groen = porta.1
symbol oranje1 = porta.2
symbol w1recht =porta.4
symbol w1rond = porta.5
symbol rijden = porta.7
dim a as bit
dim waarde as byte

Clear                        ; Wis alle ram geheugen

DelayMS 500                  ; Stabilisering 0.5_sec

        ;76543210            ; Hulpregel Poort poort_B
PORTB = %00000000            ; Zet poort_B laag
TRISB = %00000111            ; Poort_B als uitgang

        ;76543210            ; Hulpregel Poort poort_A
PORTA = %00000000            ; Zet poort_A laag
TRISA = %00000000           ; Poort_A als ingang

start:
if vrijgave = 1 or stationchef = 1 or bezetmelding = 1  then
   rood  = 1 
   groen = 0
   a = 0
endif
rijden1:
      if vrijgave = 0 and stationchef = 0 and bezetmelding = 0 then
          rood = 0
           groen =1
           goto wissel         
      endif 
        if groen = 0 then
          rijden = 0
        endif
      goto start     
  wissel:
  if stationchef = 0 and a = 0 then
      w1recht = 1
      a = 1
          delayms 400
       w1recht = 0
       delayms 800
       rijden = 1
      EndIf                  ; Einde als      endif
goto rijden1   

dit is een eenvoudig signaal dat meer 1 wissel stuurt.
de wissel word BV eerst gezet en dan is er een pauze voor het signaal op groen gaat.


Dan is er nog de station chef
Dit is eigenlijk diegene die de touwtjes in handen gaat hebben.
Hij bepaalt wie en wat er gaat gebeuren.
Ik kan kiezen tussen FIFO schakeling of RANDOM keuze.
bij fifo laat hij het station vol lopen en laat dan de eerste terug vertrekken.
bij random bepaalt hij zelf wat hij doet
het kan dus zijn dat het station vol staat of dat er geen trein te bespeuren valt aan de perrons.
dan is er nog de rangeermeester die dan weer over alles het meeste te zeggen heeft.
hij is baas van de 2 onderste sporen die hij kan benutten om trein stellen in en uit elkaar te halen.
rangeren gebeurt manueel en dan heb ik zelf dus de controle.
de stationchef blijft dan nog 3 sporen over waar hij zijn ding op kan doen.

hopelijk begrijp baar anders maak ik een grafiekje wat misschien beter te begrijpen is..
gr raf
Titel: Re: Analoog via PC aansturen
Bericht door: Sattrickske op 21 januari 2014, 13:09:30 PM
Ik denk dat ik kan volgen.  Maar, 3 PICs per blok lijkt me wat veel.

Je verliest heel veel van je IO pinnetjes aan de lichtsignalen.  En je hebt een beperking op je PIC16F628: één PWM uitgang.  Dus zo begrijp ik je keuze van 3 PIC per blok.

Maar... om de opstelling te vereenvoudigen zou ik iets anders werken en een heel blok aansturen:
- 1 PIC (misschien een iets zwaardere)
- Lichten aansturen via 74138 (3 to 8 line decoders)
- PWM zelf maken op 3 pinnetjes (ééntje voor elk blok) of één PWM voor de 3 blokken die je kan in/uitschakelen

Voor dat laatste gebruik je NAND of AND poorten met aan één kant je PWM signaal en aan de andere kant een 'chip select' signaal (telkens één IO pinnetje van de µC) en de uitgang ervan stuur je naar je schakel transistoren van elk blok.

Jouw oplossing gaat ook perfect hoor, ik bied je enkel maar een alternatieve oplossing.  Enkel met je code kan ik niet veel helpen, ik ben C gewend.  Enkel de CP_ON zou ik CP_OFF van maken, da's meer een lastpak dan wat anders...  En ook de MCLRE_ON heb je niet nodig, maar als je 'm gebruikt, moet je reset hardware wel in orde zijn (zie datasheet).
Titel: Re: Analoog via PC aansturen
Bericht door: raf op 21 januari 2014, 22:02:36 PM
Hallo Patrick

De code is reeds aangepast.
Ja beveiligen is echt wel stom.
De pic's zijn droog getest en ze werken op het test bordje.
Nu wachten tot ik de fed's en torren heb en zo een eerste blok sturing kan gaan bouwen.
De beperking zit ook in het proton light programma dat ik gebruik
50 regels is de max.
Ik wil de volledige versie aan kopen maar het ontbreekt me op het ogenblik aan "de goesting".
Als ik er drie klaar heb dan kan ik aan de programmatie van de stationchef beginnen maar daar heb ik dus wel de volledige versie voor nodig.
Ik kan alleen maar die voor het schaduw station programmeren en die voor het dubbel spoor in het zicht bare station.
Kwestie van toch een grotere pic nodig te hebben en meer programma regels
De 16F877 is er eentje met meer in/uitgangen
(https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcQysWh2BvUnAtQtfE-2iyJr79zLIVTwQUfs--LG1dbImgEdLcOE)

Gr raf
Titel: Re: Analoog via PC aansturen
Bericht door: Sattrickske op 21 januari 2014, 22:34:45 PM
Hmmm, in de PIC Basic compilers ben ik helemaal niet thuis, ik gebruik steeds C en her en der wat assembler.  Voor C heb je volledige IDE's met compiler/toolchain gratis en voor niks, maar dan moet je wel C kennen.  Hetzelfde geldt voor assembler.  De tools van Microchip zijn MPLab X (IDE) en XC8 (compiler) zijn gratis, maar hebben berperkingen: de code wordt kunstmatig vertraagd en ietwat lomper gecompileerd.  Als je betaald (200USD) vallen ze weg.  Maar voor modelbouw kan je perfect met de beperkingen van de gratis versie leven.  Als je realtime applicaties moet ontwikkelen dan gebruik je beter SDCC (open-source en dus gratis, zonder beperkingen) ipv XC8.

De PIC16F877 is een veel gebruikte µC op test en demo borden.  Ik heb er hier zo eentje liggen: een QL200; niet meteen de goedkoopste, maar verdomd handig om prototypes te maken.

Ik werk heel veel met PIC12, PIC16 en PIC18 van de Microchip familie (allemaal 8-bit) en daarnaast met ARM Cortex M4 voor 32bit applicaties.  Voor elk gamma van die processoren heb ik wel ergens een demo/prototyping bord liggen.  Daarmee kan ik op voorhand al een beetje aftasten welke processor ik uiteindelijk voor m'n project ga nodig hebben.
Titel: Re: Analoog via PC aansturen
Bericht door: Geert op 21 januari 2014, 22:39:11 PM
 Raf, kies dan een 16F887 i.p.v. Een 16F877.   Deze heeft meer vrije ingangen, meer mogelijkheden, en is bovendien zeker de helft goedkoper (Conrad)

Geert
Titel: Re: Analoog via PC aansturen
Bericht door: raf op 22 januari 2014, 20:02:12 PM
Hallo

Bedankt voor de info wat de kostprijs aan gaat en de ingangen.
Maar ik ga eerst op mijn eigen manier een flowchart aan maken om te kijken wat ik nodig heb.
En ja ik probeer toch zo een chart aan te maken maar ik doe dat op ruitjes papier.
Naargelang de kleuren die ik gebruik weet ik hoeveel in/uitgangen ik ga nodig hebben en daaraan bepaal ik de pic.
Ik denk maar zo "hoe het werkt is niet de zaak als het maar werkt".
Ik zal blij zijn als het pay day is LOL dan kan ik achter de fed en andere klein delen om een eerste pwm sturing op te bouwen.
En dan kijken hoe het loopt.
de eerste gaat een eenvoudige zijn omdat die gewoon een stukje baan moet gaan sturen.
trein detect door S1 dan gewoon vertragen tot X
trein detect door S2 dan terug op trekken.
Niet meer en niet minder gaat deze eerste moeten doen maar zo kan ik wel kijken of alles werkt zoals gepland.
dan manueel met schakelaar en led de ingang vrijgave en bezetmelder controleren zodat ook dit deel van het programma kan getest worden.
Elke keer er dan eentje bij komt geraakt de baan verder af gewerkt.
Het station gaat zo spoor per spoor bestukt worden tot de chef geprogrammeerd gaat worden speel ik de baas LOL.
Heb ik toch ergens iets te zeggen mijn gedacht.
Titel: Re: Analoog via PC aansturen
Bericht door: raf op 06 februari 2014, 12:00:59 PM
hallo

een tijdje niet gepost maar toch bezig geweest
het programma in de 50 propton lijnen krijgen is geen optie
MB labs geeft problemen wat programmeren aan gaat want ik blijf steeds error's krijgen want ik ook doe
dan amicus 18 is weer het probleem dat die maar 1 pic kent (gratis versie) en dus juist niet die ik heb liggen mijn gedacht

hier de code
;program signaal

  Device 16F628A               ; processor type 12F629

XTAL 4                     

Config INTRC_OSC_NOCLKOUT,_  ; Interne oscilator aan
       WDT_OFF,_             ; WatchDog Timer uit
       PWRTE_ON,_            ; Power-up Timer Enable aan
       MCLRE_ON,_            ; Externe Master Reset Enable aan
       BODEN_OFF,_           ; Brown Out Detectie Enable uit
       LVP_OFF,_             ; Low-Voltage Programming uit
       CP_OFF                 ; Code Protection uit


All_Digital TRUE             ; Alle poorten digitaal


Dim a As Byte

Symbol s1 = PORTB.0
Symbol s2 = PORTB.1
Symbol vrijgave = PORTB.4
Symbol frequentie = 2000
Symbol groen = PORTA.0
Symbol rood = PORTA.1
Symbol bezet = PORTA.2
Declare CCP1_Pin PORTB.3     ; PWM op poort B.3
  Dim waarde  As Word
  Clear

  DelayMS 500
  PORTB = %00000000
TRISB = %00010111

PORTA = %00000000
TRISA = %00000000
a=0

main:
If vrijgave = 0 And s1=0 And s2 = 0 Then
  GoSub vrij
  EndIf
If vrijgave = 0 And s1=0 And s2 = 0 Then
  GoSub doorijden
EndIf
  If vrijgave = 1 Then
  GoSub bezet1
  EndIf
  If vrijgave = 1 And s1 = 1 Then
   GoSub afremmen
EndIf
  If vrijgave = 0 And s1 = 1 And s2 = 1 Then
   GoSub vrij

  EndIf
   If vrijgave = 0 And s1 = 1 And s2 = 1 Then
   GoSub optrekken
  EndIf
   GoTo main
   
vrij:
rood = 0
  groen = 1
  Return

  bezet1:
  rood = 1
   groen  = 0
  Return


doorijden:
If s1 = 1 Then
bezet = 1
    EndIf
rood = 0
groen = 1
a = 255
 
Return
 
 
 
afremmen:
  bezet = 1
  waarde =255
For a = 255 To 10  Step -1
    Dec waarde
       HPWM 1,waarde,frequentie ; Led_1 op poort B.3 (PWM)
   If waarde  <11 Then waarde = 10
Next a
  Return
 
   optrekken:
   bezet = 1
   waarde = 0
   For a = 0 To 255
    Inc waarde
       HPWM 1,waarde,frequentie ; Led_1 op poort B.3 (PWM)
   If waarde = 253 Then waarde = 255
Next a
  GoTo   main
End


Misschien eerst wat uitleg.
!-----------------------!------------------------------------------------!
        S2                                                 S1                                bezet ->

De loc rijd van rechts naar links.
Bij "vrijgave" vorig signaal staat het licht op groen en bezet -> is 0 dus de trein kan het blok binnen rijden.
Bij het bedienen van S1 word bezet-> 1 dus een achter op komende loc staat voor roodlicht.
Nu zijn er twee opties.
Voorliggend blok is bezet of voor liggend blok is vrij.
Bij vrij gaat de trein naar door rijden en rijd gewoon door tot hij S1 van het volgende signaal bereikt en zet dan daar de bezet melder op bezet->.
Bij bezet vorig blok begint de trein af te remmen tot een minimum snelheid tot hij S2 bereikt.
Waar hij dan tot stilstand komt voor het rode licht.
Bij vrijgave voor liggende blok komt het signaal terug op groen en de trein begint op te trekken .en rijd door tot hij weer S1 van het voorliggende blok heeft bereikt en zo Bezet-> vrijgeeft .
Bij verlaten van S2 word het signaal toch rood en de bezet-> word vrij gegeven .


Dit is dus een gewoon signaal dat op de baan staat.
Mijn baan bestaat dus uit allemaal blokken behalve de wissel straten dit horen nergens bij.
De wissel straten worden door de station chef bestuurt die in de stations ook bepaalt wie er vertrekt.
Dit vooral in de schaduw stations die volledig op automaat draaien.
Het kleine 4 sporige station word door 1 station chef aan gestuurd want hier komen toch geen signalen te staan.
Op trekken en afremmen gebeurt ook niet de loc's stoppen gewoon op een stop sectie.
Daar word zowiezo langzaam gereden omdat je daar de treinen toch niet ziet en zo zijn ze langer onder weg .
Dus hier geen pwm sturing wat de zaak niet goedkoper maakt want ik heb toch de sturingen nodig maar de pic schakelt gewoon de fot's aan en uit zo kom ik dus met 1 pic toe voor de 4 sporen .

Kan iemand eens naar het programma kijken aub of ik iets niet goed gedaan heb of wat het zou kunnen vereenvoudigen .
Want zoals het nu is kan ik het niet testen daar proton geen HEX file aan maakt.
groeten raf
ik begin stilletjes aan de kleren te krijgen van die rommel
Titel: Re: Analoog via PC aansturen
Bericht door: Gerolf op 06 februari 2014, 15:18:21 PM
Ik zie enkele vreemde dingen in je programma:
- "optrekken" eindigt niet met een return, maar wordt wel als subroutine aangesproken
- "binnen je "main" hebben "vrij" en "doorrijden" dezelfde voorwaarde
- In je lussen laat je byte "a" en word "waarde" samen tellen.
  Ik dacht dat een for ... next ook met een word kon (en dan heb je "a" niet nodig)

... maar ik werk met AVR's en Bascom. Mogelijk zijn zulke vreemde dingen bij een Pic normaal  ::)
Titel: Re: Analoog via PC aansturen
Bericht door: PeterC op 06 februari 2014, 15:41:36 PM
Citaat van: Gerolf op 06 februari 2014, 15:18:21 PM
...Mogelijk zijn zulke vreemde dingen bij een Pic normaal  ::)

@Gerolf: foei!  :) :) :)


@Raf: welke taal is dit?  Ik zie goto's en dan komt mijn haar recht.  Niet dat op mijn hoofd want dat is door de vele goto's in mijn leven al lang verdwenen - eenvoudig gezegd: gooi die goto's weg zodat je een 'leesbaar' en 'onderhoudbaar' programma krijgt.  In de meeste talen bestaat zelfs geen goto meer zodat je die ook niet meer kan ge(mis)bruiken (goto = spaghettiprogrammeren (http://en.wikipedia.org/wiki/Spaghetti_code)).


Titel: Re: Analoog via PC aansturen
Bericht door: Gerolf op 06 februari 2014, 17:27:55 PM
@ PeterC:  ;D  ;)

Naar mijn idee is dit een Basic-variant

Er staan twee goto's in de listing.
- De onderste hoort een return te zijn
- De eerste (main: .... goto main) wordt meestal vervangen door "do ... loop"
Titel: Re: Analoog via PC aansturen
Bericht door: PeterC op 06 februari 2014, 17:36:10 PM
Citaat van: Gerolf op 06 februari 2014, 17:27:55 PM
@ PeterC:  ;D  ;)

Naar mijn idee is dit een Basic-variant

Er staan twee goto's in de listing.
- De onderste hoort een return te zijn
- De eerste (main: .... goto main) wordt meestal vervangen door "do ... loop"

De eerste hoort dus geen goto te zijn en kan dan al weg en de tweede vervangen door "do...loop" en dan nog de subroutines uit die "do...loop" halen en de spaghetti is weg.   ...en wordt het leesbaar.
Titel: Re: Analoog via PC aansturen
Bericht door: Gerolf op 06 februari 2014, 17:40:55 PM
Als een subroutine maar één keer wordt gebruikt, kan je hem inderdaad beter weg laten  ;)
Titel: Re: Analoog via PC aansturen
Bericht door: raf op 06 februari 2014, 17:41:59 PM
Hallo

effe proberen uit te leggen

36 jaar geleden had ik sinclaire basic en daarvoor een z80 met machine taal programming
basic was geen probleem en daar kreeg ik in die 1 k redelijk wat programma regels in weg geschreven.
maar nu die pic basic is heel andere koek.
omdat er veel pic gerelateerde instructies zijn die ik dus niet of slecht onder de knie heb.
BV portA.5 kun je niet als uitgang gebruiken ????juist ja data sheet
de pwm zit alleen maar op poort PORTB.3
en zo zijn er nog van die zaken zoals het instellen van de fuse's en dergelijke.
dan komt het probleem van de programmers er nog eens bij.
proton vind ik lekker werken maar 50 regels en gedaan (misschien kan ik nog een licentie kopen)
micro basic maar op dat forum krijg je geen ondersteuning of haast geen meer(topic's van meer dan 2 jaar oud)
micro basic pro dan maar ??? helemaal verschillend wat instructies betreft(trekt meer op ????)
je moet een main: hebben en een end.
dan moet je main niet staan daar waar je het dacht want meestal staat dat aan het einde van je programma.
een fout welke gevonden word lijkt op dit
21 303 Identifier "Pwm_Init" was not declared signaal3.mbas
21 304 Syntax error: Expected "end" but "Pwm_Init" found signaal3.mbas
21 304 Syntax error: Expected "sub" but "(" found signaal3.mbas
21 304 Syntax error: Expected "end" but "2000" found signaal3.mbas
21 304 Syntax error: Expected "." but ")" found signaal3.mbas
0 102 Finished (with errors): 06 feb 2014, 17:39:11 signaal3.mbppi

in proton krijg je een beter syntax uitleg en krijg je ook nog te zien wat er verkeerd is gedaan.
in MBP is het zo van" zoek het maar uit "maar er is een fout

@gerolf

de eerst keer spring ik naar vrij om de signalen te schakelen
vrij:
rood = 0
  groen = 1
  Return

de tweede keer naar door rijden om het volledige blok + stop blok door te rijden
doorijden:
If s1 = 1 Then
bezet = 1
    EndIf
rood = 0
groen = 1
a = 255
   Return
Maar hier word gekeken of er een trein op S1 staat en dan word de (Bezet )1 gemaakt
dit om de vrijgave van het verlaten blok te activeren en dus het signaal aldaar op rood te zetten

wat de lussen betreft je hebt gelijk achter aan moet nog een return komen te staan
optrekken:
   bezet = 1
   waarde = 0
   For a = 0 To 255
    Inc waarde
       HPWM 1,waarde,frequentie ; Led_1 op poort B.3 (PWM)
   If waarde = 253 Then waarde = 255
Next a
  return
End

Ik had een probleem om met (a) de nummer waarde  te meten dus heb ik de inc of dec code toegevoegd waar ik dus wel de waarde van kon uitlezen zonder een probleem te verkrijgen met de teller.

@ peter
wat de gosub aan gaat
dat komt omdat ik deze routines geschreven had voor de station blokken en signalen .
het verschil tussen een gewoon signaal en het sttion is dat voor een gewoon signaal er maar 1 pic en pwm sturing gebruikt word
In het station is dit door 2 pic's gedaan met elk een pwm sturing.
De  eerste pic doet de trein af remmen tot aan S2
De tweede doet de trein terug op trekken
Als er door gereden moet worden dan staan de twee pic's dus vol open en de trein kan door rijden.
Ik heb dit zo gedaan om te kunnen rangeren bij de station's
de sturingen kunnen los gekoppeld worden (overstuurt)door de hand besturing .
Als ik op het bord een schakelaar omzet gaat bij het betreffende signaal de witte lamp branden en kan ik met de loc dus gaan rijden .
Als hij is los gekoppeld (ontkoppel rail)dan kan hij de verzorging binnen rijden .
Het doorgaande verkeer kan gewoon door gaan alleen spoor 1 en 2 zijn dan bezet.
Uit de depot kan een nieuwe loc koppelen en na het terug omzetten van de schakelaar staat de trein terug klaar voor het verkeer .
De loc die dan in het depot staat kan dan of op automaat of manueel gereden gaan worden.
dus die gosub routines zijn zo ontstaan om dat ik weet dat deze op zichzelf werken zonder problemen .

gr raf die jullie hulp echt wel appricieerd .
Titel: Re: Analoog via PC aansturen
Bericht door: raf op 06 februari 2014, 17:51:08 PM
Hallo

ik heb de goto reeds aangepast

eventjes het verschil tussen proton (welk ik beter versta)en MBP
eerst proton
Declare CCP1_Pin PORTB.3
initialisatie van de poort

HPWM 1,waarde,frequentie
hier schakel je de pwm module mee aan en uit en de stapjes door waarde te veranderen


MBP programmeren
Pwm_Init(2000)
initialisatie van de pwm poort ????? welke poort geen idee


Pwm_Start
deze regel moet er staan om de pwm te starten

Pwm_Change_Duty(a)
hier schakel je de pwm module mee aan en uit en de stapjes

  Pwm_Stop
en hier schakel je hem dus terug mee uit

gr raf

Titel: Re: Analoog via PC aansturen
Bericht door: raf op 06 februari 2014, 19:25:53 PM
Ik ben dus opnieuw begonnen en hopelijk vinden jullie deze opzet beter dan de vorige
Al weet ik dus niet hoe je dit overzichtelijker kunt vinden

program signaal3
' MCU: 16F628A


symbol S1 = portB.0
symbol S2 = portB.1
Symbol vrijgave = PORTB.4
Symbol frequentie = 2000
Symbol groen = PORTA.0
Symbol rood = PORTA.1
Symbol bezet = PORTA.2
        PWM_Init(2000)
        Pwm_Start
        Pwm_Change_Duty(a)
    dim a as word


main:

PORTB = %00000000
TRISB = %00010111

PORTA = %00000000
TRISA = %00000000
a = 0
doorrijden:
   If vrijgave = 0 then
       rood = 0
       groen = 1
   if S1 = 1 then
      a = 255
      portA.2 = 1
       else a = 0
       porta.2 = 0
       end if
   if S2 = 1 then
      a = 255
      porta.2 = 1
     end if
    end if
  remmen:
  if vrijgave = 1 then
  groen = 0
      rood = 1
      a = 255
  if S1 = 1 then
    Dec(a)
'hier pwm ?,
      if a = (10) then
    a = 10
    end if
  end if
  end if
  if S2 = 1 then
  a = 0
  end if

  optrekken:
  if vrijgave = 0 then
       rood = 0
       groen = 1
       a = 0
       inc (a)

'hier pwm
          if a = (254) then
    a = 255
    end if
   
  end if
  if vrijgave = 1 then
  porta.2 = 0
  groen = 0
    rood = 1
    end if
 
 
end.

alleen krijg ik dus de pwm niet aan het werken
en de met  Symbol bezet = PORTA.2 werkt ook niet als ik bezet = 1 doe
eens kijken of bezet (1) wel wil werken

Je ziet ik werk er aan al is het aards moeilijk om dit te begrijpen voor mij

Juist het programma getest en het werkt voor geen meter
de schakelaars zijn wel ontdenderd maar het signaal word nooit rood alleen het bezet signaal word wel geactiveerd
de led's flikkeren als zot en dat had ik voor heen niet
enig idee want er verkeerd is ???
gr raf
Titel: Re: Analoog via PC aansturen
Bericht door: PeterC op 06 februari 2014, 20:18:21 PM
Citaat van: raf op 06 februari 2014, 19:25:53 PM
...Je ziet ik werk er aan al is het aards moeilijk om dit te begrijpen voor mij...

Lezen (http://ww1.microchip.com/downloads/en/DeviceDoc/40044E.pdf) tijdens het ontwaken, tijdens de ontbijttafel, op het toilet, tijdens het wachten op de bus, op de trein, ..., tijdens het avondmaal, voor het naar bed gaan, tijdens  :o :o :o     :) :) :)

Lees/leer de datasheet  ;)


Titel: Re: Analoog via PC aansturen
Bericht door: raf op 06 februari 2014, 21:01:17 PM
hallo

Peter de datasheet geeft geen probleem.
De kleinere programma's werken in proton zonder problemen .
Maar de PBP is gewoon een shit programma.
Er is een forum maar de laatste postings zijn van 2 jaar terug.
Erg veel hulp krijg je daar echt niet en op het proton forum wel.
Niet dat ik vraag dat iemand mijn programma's schrijft want dat wil ik zelf doen anders leer ik het nooit.
Maar enige hulp is welkom
Het is niet dat ik het niet kan leren maar als je tussen 4 beton muren zit met alleen een nagelvijltje probeer dan maar eens buiten te geraken.
Als er dan iemand een drilboor aan reikt neem je die graag aan maar een hamer en bijtel ben ik ook reeds blij
Ik zal wel kappen om buiten te geraken .
gr raf 
Titel: Re: Analoog via PC aansturen
Bericht door: raf op 07 februari 2014, 05:09:55 AM
Ik begrijp helemaal niet waarom die compiler
Micro BASIC pro heeft
heel dat programmeren heeft geen mm te maken met basic
een eenvoudig probleem kun je met die compiler niet oplossen
dysplays en can bussen en ethernet en wat je maar kunt verdenken
maar een eenvoudig programma schrijven welk moet werken met maar eigenlijk 3 schakelaars lukt niet
in Micro Basic pro
als ik die shit schrijf in GWBASIC dan werkt het programma meteen zonder problemen
dan kan ik via een printer poort meteen een signaal sturen
wissels om zetten en treinen laten rijden
dus aan het programmeren kan het echt niet liggen

hier een regel in proton
If vrijgave = 0 and S1 = 0 and S2 = 0 then
gosub vrij


werkt perfect in Proton maar in micro basic voor geen meter
nee dan moet het dit worden

if ((vrijgave=0) and (S1=0) and (S2 = 0)) then
gosub vrij

in proton de pwm

declare CCP1_Pin PORTB.3

Hpwm 1 ,a, 2000


in MBP
PWM1_init (2000)


PWM1_start
PWM1 set_Duty(a)
PWM1_stop

Dus ik snap er de ballen niet meer van en ik wacht tot ik de amica 18 of de proton kan aan kopen
voor ik nog tijd,geld en energie ga steken in de rest .

Gr raf die het nu echt effe niet meer ziet zitten.
Titel: Re: Analoog via PC aansturen
Bericht door: Stieven76 op 07 februari 2014, 09:39:15 AM
Raf, ik weet niets van pic programmeren, wel een beetje van VB.net, C# en javascript.  ;)


Je kan je if structuur een beetje vereenvoudigen door de middelste ronde haakjes weg te laten, al veranderd dat niets aan de werking. Je bent toch ook je end if niet vergeten? Maar normaal krijg je dan wel compile errors vermoed ik.



if (vrijgave=0 and S1=0 and S2 = 0) then
gosub vrij
end if



Welke taal gebruik je eigenlijk juist? De code in je voorbeeld lijkt me heel hard op VB.net te trekken.
Titel: Re: Analoog via PC aansturen
Bericht door: raf op 07 februari 2014, 17:20:10 PM
@ stieven

ik heb vroeger sinclair basic geleerd en GWbasic.
uit die twee is dan VB gekomen en dan 1000 afleidingen daar op
die "micro basic pro" heeft noppes nog met basic te maken
Die basic is zo ingewikkeld dat je der knetter van word
de "proton"basic is doenbaar en ik weet dat de pic gerelateerde instructies iets is wat ik moet leren .
daar maak ik ook geen probleem van en ik leer snel
maar als de gewone standaard instructies opeens niet meer blijken te werken dan is het hek van den dam
dit is de code die ik nu geschreven heb en deze zou goed moeten zijn buiten de eerste 10 lijnen met de fuse instellingen
deze werken niet daar ik dit in amica18 heb geschreven (wat een soort van proton kloon )is
alleen de gratis versie werkt met een andere processor dan ik gebruik en dan komen de fuses die je moet zetten niet uit en krijg je een error
maar daar kan ik voorlopig mee leven omdat hier de rest van de basic wel werkt
hier de nieuw geschreven code.

;program signaal3
Device 16F628A
 
Config INTRC_OSC_NOCLKOUT,_  ; Interne oscilator aan
       WDT_OFF,_             ; WatchDog Timer uit
       PWRTE_ON,_            ; Power-up Timer Enable aan
       MCLRE_ON,_            ; Externe Master Reset Enable aan
       BODEN_OFF,_           ; Brown Out Detectie Enable uit
       LVP_OFF,_             ; Low-Voltage Programming uit
       CP_OFF                 ; Code Protection uit

Xtal=4
All_Digital= TRUE
Symbol S1 = PORTB.0
Symbol S2 = PORTB.1
Symbol vrijgave = PORTB.4
Symbol frequentie = 2000
Symbol groen = PORTA.0
Symbol rood = PORTA.1
Symbol bezet = PORTA.2
Declare CCP1_Pin = PORTB.3
    Dim a As byte



  S1 = 1
  S2 = 1
PORTB = %00000000
TRISB = %00010111

PORTA = %00000000
TRISA = %00000000
a = 0
begin:

  If vrijgave = 0 And S1=0 And S2 = 0 Then
  GoSub vrij
   End If
  If vrijgave = 1 Then
   GoSub bezet1
   End If
   If vrijgave = 0 And S2 = 1 Then
   GoSub optrekken
   End If
   GoTo begin
vrij:
     rood = 0
     DelayMS 100
     groen = 1
     If vrijgave  = 1 Then GoTo bezet1
     If S1 = 1 Then GoTo doorijden
     GoTo vrij
   doorijden:
If S1 = 1 Then
       bezet = 1
         a = 255
    HPWM 1,a,2000 ;  poort B.3 (PWM)       
          End If       
        Return
       
bezet1:
      bezet = 1
      groen = 0
      DelayMS  100
      rood = 1
      If S1 = 1 Then GoTo remmen
      If vrijgave = 0 Then Return   
      GoTo bezet1
     
   remmen:   
For a = 255 To 10  Step -1
     DelayMS 100
    HPWM 1,a,2000 ;  poort B.3 (PWM)   
      Next a
     return
optrekken:
     bezet = 1
   For a = 0 To 255
   DelayMS 100
  HPWM 1,a,2000 ;  poort B.3 (PWM)
  If vrijgave = 1 Then bezet = 0
  Next a
   Return

End

deze is vlotter geschreven en minder goto en gosub gebruikt al is het haast onmogelijk om deze helemaal niet te gebruiken.
groeten raf
Titel: Re: Analoog via PC aansturen
Bericht door: ysbeer op 10 februari 2014, 20:37:59 PM
Waarom gebruikt niemand hier Qbasic in prof,uitvoering heeft die zelf een mogelijkheid om je programma naar machine tall om te zetten.(veel sneller)
Ook de lastige gosub is vervangen door case select,en regelnummers zijn niet meer nodig.

Modern is dit natuurlijk ook niet,maar het werkt goed en betrouwbaar.
Voordeel is dat ,vind ik,dat je snel even iets kunt proberen.

wim

Titel: Re: Analoog via PC aansturen
Bericht door: raf op 10 februari 2014, 20:43:51 PM
Hallo Wim
Qbasic ??????
ik ben gewoon om in GWBasic te programmeren maar dat omzetten naar een hex file ????
ik denk niet dat het zo eenvoudig is
maar Q basic verschilt niet zo erg veel van Gwbasic
maar ik denk dat om een pic te programmeren  Qbasic misschien niet genoeg kan wat programmatie aan gaat
hoe doe je het BV met de switches en dergelijke
heb je reeds een progje in Qbasic dan ben ik wel eens benieuwd naar de op bouw daar van

mijn baan werkte vroeger via een pc en de printer poort en heel dat programma was geschreven in gwbasic
wat wel goed werkte maar beperkingen had
ik kon maar 255 zaken sturen in totaal en daarom ben ik nu over geschakeld naar die pic processoren
als ze eenmaal lopen zijn ze stukken makkelijker om op te bouwen en veel goed koper
en ze kunnen meer dan wat ik met de pc kon doen

gr raf
Titel: Re: Analoog via PC aansturen
Bericht door: ysbeer op 12 februari 2014, 15:15:10 PM
Qbasic en ook de prof.uitvoering van Qbasic zijn de opvolger van GWbasic
Ze kan veel meer dan GWbasic en ook slimmer.
Het goto en gosub is vervangen door een sub functie .Daar mee schrijf je kleine hulpprogrammas die je overal in het programma kunt aan roepen.
Dus niet meer een spagheti program met gosubs en goto .
De prof.uitvoering van qbasic bevat een compiler voor het omzetten naar machine taal.
Even wennen maar het werkt perfect.
Qbasic en zeker de prof.uitvoering is veel en veel beter dan gwbasic.

Als je het prof,programma wilt hebben kan ik wel een CD sturen (tegen verzend kosten)

Wie in gw kan programmer kan dat ook in QBasic.

Een boek is eventueel wel bij mij te leen.

Heel mijn baan draait op qbasic (niet digitaal)maar dat zou ook kunnen.

wim
Titel: Re: Analoog via PC aansturen
Bericht door: raf op 12 februari 2014, 17:46:35 PM
Hallo Wim

juist van de mensen van proton een fikse korting gekregen
en dus het programma aan gekocht
het verschil was maar eventjes een 80 euro en das mooi mee genomen
plus ik krijg het volledige devolopment  en test pakket er gratis bij
hopelijk krijg ik het pakket snel in huis

gr raf 
Titel: Re: Analoog via PC aansturen
Bericht door: PeterC op 12 februari 2014, 19:07:04 PM
Citaat van: raf op 12 februari 2014, 17:46:35 PM
...het verschil was maar eventjes een 80 euro en das mooi mee genomen...

Ik vind nergens een prijs van die Proton Basic.  Maar bij 80 Euro verschil kan ik me wel al iets voorstellen...
Titel: Re: Analoog via PC aansturen
Bericht door: raf op 12 februari 2014, 19:19:55 PM
hallo peter

ik moet nu 100£ betalen en het was 180£
een heel verschilletje mijn gedacht

gr raf
Titel: Re: Analoog via PC aansturen
Bericht door: PeterC op 12 februari 2014, 21:55:48 PM
Raf,

121 Euro ipv 219 Euro.  Flink voordeel, maar wel nog veel geld voor een (vrij onbekende) compiler.  Er zijn heel wat bekende gratis (freeware en open-source) compilers zomaar te downloaden en waar je via diverse fora ruime ondersteuning voor krijgt...
Blijkbaar wil je vasthouden aan Basic.  Maar het woord zegt genoeg.

Citaat van: raf op 10 februari 2014, 20:43:51 PM
Qbasic ??????
ik ben gewoon om in GWBasic te programmeren maar dat omzetten naar een hex file ????
ik denk niet dat het zo eenvoudig is

QBasic (https://www.google.be/search?q=qbasic&source=lnms&tbm=isch&sa=X&ei=BdD7Uo79EOHiywOhiILwCQ&ved=0CAcQ_AUoAQ&biw=1920&bih=920#q=qbasic&tbm=isch&imgdii=_) en GWBasic (https://www.google.be/search?q=qbasic&source=lnms&tbm=isch&sa=X&ei=BdD7Uo79EOHiywOhiILwCQ&ved=0CAcQ_AUoAQ&biw=1920&bih=920#q=qbasic&tbm=isch&imgdii=_) zijn talen die geschreven zijn om (minimalistische) PC programmaatjes te schrijven (DOS programma's - geen grafische interface).  De code porteren naar een controller?  Onmogelijk zonder veel aanpassingen!

Om controllers te programmeren heb je een taal/compiler nodig die geoptimaliseerd is voor dat type controller. Als QBasic en GWBasic (PC) gebruiker ga je misschien iets snappen van wat in een Basic controller programma staat maar zonder kennis van de datasheet van de controller gaat er toch nog veel Chinees in staan.

Eén raad voor diegene die met controllers willen werken (een herhaling van één van de vorige posts): sta op met de datasheet, ontbijt ermee, ga ermee naar het toilet, gebruik een geplastificeerde versie voor onder de douche, lees ze constant!  Voor vb een PIC 18F2550 is die datasheet 426 pagina's!  ...Maar iedere pagina bevat belangrijke informatie om die controller te begrijpen...  ...En die voor jou te laten werken!

Ik heb totaal geen probleem met Basic en de gebruikers ervan en voor mijn werk ben ik nu en dan verplicht om VBA (http://nl.wikipedia.org/wiki/Visual_Basic_for_Applications) te gebruiken (maar ik zie het eerder als een verplichting en werk veel liever in een taal met veel meer mogelijkheden - striktere regels).

Titel: Re: Analoog via PC aansturen
Bericht door: raf op 12 februari 2014, 22:19:01 PM
Hallo Peter

ik heb de volledige datasheet op mijn tablet staan
maar daar alleen red je het niet mee
de proton compiler is niet onbekend en die van Mp lab daar word ik knetter van
die hebben nog niet eens een goeie fout melding en die heeft proton wel
wat amica18 betreft  die is gratis en ook weer niet
je kan tot 2 k programmeren en je hebt maar de keuze uit twee processoren
ik heb nu reeds een pic aan het werk en reeds programma's klaar als ik de sleutel van proton in huis heb
deze zijn getest en werken reeds zoals gedacht
maar ik kan er nu op het ogenblik geen hex file van maken door de beperking van 50 regels

basic daar kan je enorm veel mee want alles wat er nu is had nooit bestaan zonder basic
er is geen enkel commando dat je in een andere taal kunt doen wat niet in basic kan gedaan worden
misschien in basic iets omslachtiger maar het kan gewoon geprogrammeerd worden
Hier al de woorden die bruik baar zijn om je programma te schrijven

A
ABS,  ACOS, ACTUAL_BANKS, ADC_RESOLUTION, ADIN, ADIN_RES, ADIN_STIME, ADIN_TAD
ALL_DIGITAL, ASM, AVAILABLE_RAM, ASIN, ATAN

B
BANK0_END, BANK0_START, BANK10_END, BANK10_START, BANK11_END, BANK11_START
BANK12_END, BANK12_START, BANK13_END, BANK13_START, BANK14_END, BANK14_START
BANK15_END, BANK15_START, BANK1_END, BANK1_START, BANK2_END, BANK2_START
BANK3_END, BANK3_START, BANK4_END, BANK4_START, BANK5_END, BANK5_START
BANK6_END, BANK6_START, BANK7_END, BANK7_START, BANK8_END, BANK8_START
BANK9_END, BANK9_START, BANK_SELECT_SWITCH, BANKA_END, BANKA_START
BIN, BIN1, BIN2, BIN3, BIN4, BIN5, BIN6, BIN7, BIN8, BIN9, BIN10, BIN11, BIN12
,BIN13, BIN14, BIN15, BIN16, BIN17, BIN18, BIN19, BIN20, BIN21, BIN22, BIN23, BIN24, BIN25
,BIN26, BIN27, BIN28, BIN29, BIN30, BIT, BOOTLOADER, BOX, BRANCH
BRANCHL, BREAK, BRESTART, BSTART, BSTOP, BUS_DELAYMS, BUSACK, BUSIN, BUSOUT
BUTTON, BUTTON_DELAY, BYTE

C
CALL, CASE, CCP1_PIN, CCP2_PIN, CDATA, CERASE, CHR$, CIRCLE, CLEAR, CLEARBIT, CLS
CON, CONFIG, CONTEXT, CORE, COS, COUNT, COUNT_ERRORS, COUNTER, CREAD, CURSOR, CWRITE

D
DA, DATA, DB, DC, DCD, DE, DEC, DEC1, DEC2, DEC3, DEC4, DEC5, DEC6, DEC7, DEC8, DEC9, DEC10
DECLARE, DEBUG, DEFINE, DELAYMS, DELAYUS, DEVICE
DJC, DJNC, DJZ, DJNZ, DIG, DIM, DISABLE, DIV2, DT, DTMFOUT, DW, DWORD

E
EDATA, EEPROM_SIZE, ELSE, ELSEIF, ENABLE, END, ENDSELECT, ENDASM
ENDIF, ENDM, EQU, EREAD, ERRORLEVEL, EWRITE, EXITM, EXP, EXP10, EXPAND
EXP

F
FILE_REF, FLASH_CAPABLE, FLOAT, FONT, FONT_ADDR, FOR, FREQOUT, FSRSAVE

G
GETBIT, GLCD_CS_INVERT, GLCD_FAST_STROBE, GOSUB, GOTO

H
HBRESTART, HBSTART, HBSTOP, HBUS_BITRATE, HBUSACK
HBUSIN, HBUSOUT, HEX, HEX1, HEX2, HEX3, HEX4, HEX5, HEX6, HEX7, HEX8
HIGH, HPWM, HRSIN, HRSOUT, HSERIAL_BAUD
HSERIAL_CLEAR, HSERIAL_PARITY, HSERIAL_RCSTA, HSERIAL_SPBRG, HSERIAL_TXSTA

I
I2CREAD, I2CWRITE, IBIN, IBIN1, IBIN2, IBIN3, IBIN4, IBIN5, IBIN6, IBIN7, IBIN8, IBIN9, IBIN10, IBIN11, IBIN12
IBIN13, IBIN14, IBIN15, IBIN16, IBIN17, IBIN18, IBIN19, IBIN20, IBIN21, IBIN22, IBIN23, IBIN24, IBIN25
IBIN26, IBIN27, IBIN28, IBIN29, IBIN30,ICD, IDATA, IF
IHEX, IHEX1, IHEX2, IHEX3, IHEX4, IHEX5, IHEX6, IHEX7, IHEX8
INC, INCLUDE, INKEY, INPUT, INTERNAL_BUS, INTERNAL_FONT, IJC, IJNC, IJNZ, IJZ
ISBIN, ISBIN1, ISBIN2, ISBIN3, ISBIN4, ISBIN5, ISBIN6, ISBIN7, ISBIN8, ISBIN9, ISBIN10, ISBIN11, ISBIN12
ISBIN13, ISBIN14, ISBIN15, ISBIN16, ISBIN17, ISBIN18, ISBIN19, ISBIN20, ISBIN21, ISBIN22, ISBIN23, ISBIN24, ISBIN25
ISBIN26, ISBIN27, ISBIN28, ISBIN29, ISBIN30
ISDEC, ISDEC1, ISDEC2, ISDEC3, ISDEC4, ISDEC5, ISDEC6, ISDEC7, ISDEC8, ISDEC9, ISDEC10
ISHEX, ISHEX1, ISHEX2, ISHEX3, ISHEX4, ISHEX5, ISHEX6, ISHEX7, ISHEX8

J

K
KEYPAD_PORT

L
LCD_CS1PIN, LCD_CS2PIN, LCD_DTPIN, LCD_DTPORT, LCD_ENPIN, LCD_INTERFACE
LCD_LINES, LCD_RSPIN, LCD_RWPIN, LCD_TYPE, LCDOUT, LCDREAD, LCDWRITE
LEN, LEFT$ LET, LIBRARY, LINE, LOADBIT, LOCAL, LOG, LOG10, LOOKDOWN, LOOKDOWNL, LOOKUP, LOOKUPL, LOW

M
MACRO_PARAMS, MAX, MID$, MIN, MSSP_TYPE

N
NCD, NEXT

O
ON, ON_INTERRUPT, ON_LOW_INTERRUPT, ONBOARD_ADC, ONBOARD_UART
ONBOARD_USB, OREAD, ORG, OUTPUT, OWRITE

P
PAGE, PAGESEL, PAUSE, PAUSEUS, PEEK, PEEKCODE, PICMICRO_PAGES
PIXEL, PLOT, POKE, POKECODE, POP, PORTB_PULLUPS, POT, POW, PRINT, PSAVE
PULSIN, PULSIN_MAXIMUM, PULSOUT, PUSH, PWM

Q

R
RAM_BANK, RAM_BANKS
RANDOM, RCIN, RCTIME, READ, REM, REMARKS, REMINDERS, REP
REPEAT, RES, RESET_BANK, RESERVE_RAM, RESTORE, RESUME, RETURN, REV
RIGHT$, ROR, ROL, RSIN, RSIN_MODE, RSIN_PIN, RSIN_TIMEOUT, RSOUT
RSOUT_MODE, RSOUT_PACE, RSOUT_PIN

S
S_ASM, SBIN, SBIN1, SBIN2, SBIN3, SBIN4, SBIN5, SBIN6, SBIN7, SBIN8, SBIN9, SBIN10, SBIN11, SBIN12
SBIN13, SBIN14, SBIN15, SBIN16, SBIN17, SBIN18, SBIN19, SBIN20, SBIN21, SBIN22, SBIN23, SBIN24, SBIN25
SBIN26, SBIN27, SBIN28, SBIN29, SBIN30, SCL_PIN, SDEC, SDEC1, SDEC2, SDEC3, SDEC4, SDEC5, SDEC6
SBREAK, SDEC7, SDEC8, SDEC9, SDEC10
SDA_PIN, SERIAL_BAUD, SEED, SELECT, SERIAL_DATA
SERIN, SERIN2, SEROUT, SEROUT2, SERVO, SERIAL_PARITY
SET, SET_BANK, SETBIT, SET_DEFAULTS, SET_OSCCAL, SHIFT_DELAYUS
SHEX, SHEX1, SHEX2, SHEX3, SHEX4, SHEX5, SHEX6, SHEX7, SHEX8
SHIN, SHOUT, SIN, SLEEP, SLOW_BUS, SNOOZE
SOUND, SOUND2, SQR, SSAVE, STEP, STOP, STR, STRN, STRING, STR$
STAMP_SIN, STAMP_COS, STAMP_SQR, SWAP, SYMBOL

T
TAN, THEN, TO, TOGGLE, TOLOWER, TOUPPER

U
UDATA, UNPLOT, UNTIL, UPPER
USB_CLASS_FILE, USB_DESCRIPTOR, USB_SHOW_ENUM, USBIN, USBINIT, USBOUT

V
VAL, VAR, VARIABLE

W
WAIT, WARNINGS, WATCHDOG, WEND, WHILE, WORD, WRITE, WSAVE

X
XIN, XOUT,  XIN_TRANSLATE, XOUT_TRANSLATE, XTAL

ik denk toch dat ik er mee ga toe komen mijn gedacht

gr raf
Titel: Re: Analoog via PC aansturen
Bericht door: PeterC op 12 februari 2014, 23:51:07 PM
OK Raf,
Je hebt me overtuigd...  ...Dat je verder wil in Basic...  ...Sorry, kan je dan niet verder helpen...

Een Lada Niva is een '4x4'.  Een Toyota Hilux ook...  Ze zuipen beiden 12 liter, de ene benzine, de andere diesel, maar het comfort/laadruimte...  ;)

Titel: Re: Analoog via PC aansturen
Bericht door: raf op 13 februari 2014, 00:30:12 AM
Hallo peter

Geen probleem en je kunt me altijd nog helpen want programma's worden al zei het in een andere taal principieel hetzelfde opgebouwd
hier een filmpje van de pendel sturing die ik gebouwd heb
https://www.youtube.com/watch?v=UESVdozZHo4
het kan nog beter maar de 50 regel beperking houd me daar van tegen
de signalen kunnen werken en het pendelen werkt ook en de timer is ook instelbaar
ik kan nu met een jumper kiezen of ik de korte of de lange tijd wil gebruiken
de korte stop tijd is voor test doeleinden ;de lange voor op de baan als alles klaar is.
voor de eggerbahn komt er een deel bij want die word pwm gestuurt en er komt een wissel bij
zodat de trein dan van de slakkenkuil naar de stortplaats rijd en terug naar de slakkenkuil
en vandaar uit naar de fabrieken die er komen te staan en dan weer terug naar de slakken kuil
maar dat krijg ik niet in 50 regels gestoken.
proton is aangekocht en hopelijk krijg ik het deze maand nog binnen en kan ik de rest gaan testen
hier een foto van de eggerbaan
(https://scontent-a-ams.xx.fbcdn.net/hphotos-prn2/t31/1502874_678845368834282_608398250_o.jpg)

gr raf
Titel: Re: Analoog via PC aansturen
Bericht door: raf op 27 februari 2014, 14:56:49 PM
Hallo

onder tussen proton aangekocht en dus van die 50 regel problemen ben ik vanaf.
alleen ik heb nu twee pakketten van proton want vandaag is er nog eentje toegekomen.
ergens een foutje maar LOL nu heb ik wel een reserve als der eentje kapot gaat.
het schaduw station is haast klaar op een paar schoonheids foutjes na dus dat programmeren komt goe

gr raf en filmpje volgt als het werkt