pic controller en artikel op circuitsonline


ja dat is een goed idee. waar kan ik dat vandaan halen. en dat mplab (als ik tutorials op youtube goed begrepen heb) kan ik toch zo downloaden van de site

MPLab of MPLabX kun je bij Microchip downloaden. Bij veel application notes zit ook sourcecode. http://www.microchip.com/wwwcategory/TaxonomySearch.aspx?sho...owField=no
(welke hangt af van type pic en compiler die je wilt gebruiken)

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com

mplab of mplabx, jij zegt, dat hangt af van welke pic en compiler je wilt gebruiken. als ik google dan kom ik uit dat die X staat voor experimental.
veel meer duidelijkheid kan ik niet vinden. kun je nog iets meer vertellen, wat raad jij mij aan?

Ikzelf gebruik MPLab, maar je kunt ook MPLabX gebruiken. (MPLabX is de nieuwe versie; MPLab wordt niet meer ondersteund en/of verder ontwikkeld)

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com

ik heb het geinstalleerd nu zit ik wat na te doen van youtube. maar in het youtube filmpje staan stdio en stlib er al in maar bij mij niet, wel staat xc8 er direct in bij mij. weet iemand hoe dit zit. (zie bijlage)
ook in als ik op 'source file klik' en dan new zijn er in het youtube filmpje meer opties

ja ik moet even opgang geholpen worden. ik zit met mplab ide allemaal tutorials te volgen op youtube. en nu zit ik wat te prutsen met iets simpels maar ik krijg het niet voor elkaar. ik heb het programmaatje helemaal uitgekleed, zie bijlage. als rc0 laag is wordt b1 hoog en anders is b1 laag
maar hoe kan ik hier nou een 'and' functie bij krijgen dat op rc0 ook b0 hoog en laag wordt. graag link naar tutorial of hints hoe dit heet zodat ik beter kan zoeken

ik krijg geen reactie, maar zoals bij siemens heb je 'and' 'if' 'xor' en vele andere functies, maar is dat niet mogelijk bij pic. krijg de indruk dat het er wel is maar dat het anders werkt ofzo. hoe zit dat
stel ik wil uitgang ra0 hoog hebben als rb1 en rb2 hoog zijn. weet iemand hoe je dat programmeert

hadv

Golden Member

if (rb1 = 1 and rb2 = 1) then ra0 = 1 else ra0 = 0

in C ziet dit er ongeveer alsvolgt uit :

if (portbbits.1 == 1 && portbbits.2 == 1)
portabits.0 = 1;
else
portabits.0 = 0;

overigens heeft dit niets met de uc te maken maar met de programmeertaal dus je zou eens op zoek moeten gaan naar een C-boek.

Just find out what you like and let it kill you

Op 10 mei 2017 13:01:41 schreef hadv:
if (rb1 = 1 and rb2 = 1) then ra0 = 1 else ra0 = 0

in C ziet dit er ongeveer alsvolgt uit :

if (portbbits.1 == 1 && portbbits.2 == 1)
portabits.0 = 1;
else
portabits.0 = 0;

overigens heeft dit niets met de uc te maken maar met de programmeertaal dus je zou eens op zoek moeten gaan naar een C-boek.

Volgens mij gaat dat if statement niet goed. volgens mij heeft && een hogere prioriteit dan ==. Persoonlijk zou ik haakjes gebruiken in dit geval.

hadv

Golden Member

Bij mij werkt het anders wel...(zij het dat ik het test met een gewone C compiler en dat ik ipv portbits int variabelen gebruik).

En ik heb het even voor de zekerheid opgezocht

https://www.uploadarchief.net/files/download/c-operators.jpg

Just find out what you like and let it kill you

ja mensen, hartstikke bedank maar... klinkt het dan dom dat als ik van siemens afkom en ik ziet dat,, dat dat me helemaal niks zeg zo'n tabel. als het kan een beetje meer uitleg waar moet ik beginnen

Ik gebruik altijd extra haakjes om een vergelijking, dan weet je 100% zeker wat de compiler er van maakt.
(je hoeft niet te twijfelen of op te zoeken, en bij later terugzien van de code is het ook beter te begrijpen)

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com

maar nu heb ik dit geprogrammeerd

while (1)
{
if (PORTCbits.RC0==0)
{
for (int countdelay=0; countdelay <20; countdelay ++)__delay_ms(5);
if ((PORTCbits.RC2==0) &&( PORTCbits.RC0==0) && (PORTCbits.RC7==0))
{
LATBbits.LATB0= 1; LATBbits.LATB1=1;
}
}
else
{LATBbits.LATB0= 0; LATBbits.LATB1=0;

komt voor een gedeelte uit een youtube tutorial, beetje aangepast met wat and instrukties en het werkt niet helemaal. rc2 rc0 en rc7 moeten alle 3 hoog zijn voor om b0 en b1 hoog te maken. maar als ik dan rc7 laag maak
blijven b0 en b1 hoog.

maar ik denk dat ik moet doen wat hadv zegt, op zoek gaan naar de c taal inplaats van uc taal/programmeren

Dit is C... (dus zoeken hoeft niet meer, hooguit naar een tutorial) ;)
Wat je zegt klopt trouwens niet; RB0 en 1 zijn hoog wanneer RC0, 2, en 7 laag zijn, niet als ze hoog zijn...

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com
hadv

Golden Member

Voor de Pic uc zijn verschillende programmeertalen beschikbaar:
basic (mikroElektronikaBasic en PicBasic)
pascal (mmikroElektronikaPascal)
C (mikroElektronikaC en alle microchip compilers)
JAL
en wellicht nog meer...

en je kunt natuurlijk altijd in assembler programmeren

(die tabel was voor vincent1971)

Just find out what you like and let it kill you

ik ben wat tutorials aan het doornemen
http://www.studentcompanion.co.za/multiplexing-of-7-segment-...oller-xc8/

maar nu probeer ik hem in plaats van 2 segmenten om te bouwen naar eentje met 6 segmenten, zie bijlage. voor de eerste digit en tweede digit heb ik de code geprobeerd te reconstrueren vanuit de tutorial. dat ik helemaal links alvast de 1 krijg en daarnaast de 8

maar ergens krijg ik hem niet goed. heeft iemand tips

Multiplexen hoort in een interrupt thuis, niet met waitloops... ;)
En die groene led aan RC3 zonder serieweerstand is ook niet echt aan te raden...

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com

@Gerard. Misschien een wat late reactie maar een aantal jaar geleden ben ik zelf ook met PIC begonnen. Ik maak graag zelf de software om alles aan te sturen zodat ik weet hoe het werkt. Uiteindelijk kwam ik uit op de JAL website: http://www.justanotherlanguage.org/

Daar staat ook een tutorial. Ik gebruik een aantal PICs afhankelijk van de toepassing. Voor hele simpele zaken bijvoorbeeld de 12F615 en voor wat meer luxe de 16F1825. Je kunt inderdaad helemaal verloren raken in het aantal varianten en er zijn chips met nog veel meer functies.

Voor mijn projecten gebruik ik de JAL compiler in combinatie met JAL Edit en de PICkit3 (gekocht in China overigens bij AliExpress). Werkt allemaal heel goed. De JAL taal spreekt mij meer aan dan C. Smaken verschillen nu eenmaal.

Oh en over jouw display. Het is slimmer om dit met een timer in een interrupt routine af te handelen. De code kan dan gewoon blijven lopen zonder wachttijden. Onlangs nog gemaakt voor 1 van mijn projecten ... in JAL :-)

Succes.

[Bericht gewijzigd door RobBest op 27 mei 2017 08:28:49 (12%)]

maar in die tutorial doet die het ook maar dan met 2x een 7 segment display
kan je een opzetje geven over hoe dat moet met interrupt

Bijgesloten 2 files, een schema van een RF Thermostaat die ik gemaakt heb en de source file van de display software. Je kunt het aantal displays uitbreiden naar zoveel als je wilt mits je voldoende pinnen overhoudt op de PIC controller.

Ik maak hier gebruik van de SPI interface van de PIC om een schuifregister aan te sturen. Dit was nodig omdat ik niet genoeg pinnen over had om het display aan te sturen met de IO pinnen van de PIC controller. De frequentie van de SPI controller waarmee ik het schuifregister 'clock' bepaalt de snelheid van de SPI interrupt en daarmee de refresh frequentie van het display. Er is ook een mogelijkheid om het display te laten knipperen wat ook in de SPI interrupt wordt afgehandeld.

Voor een beginner even puzzelen :-)

Succes

Ik maak hier gebruik van de SPI interface van de PIC om een schuifregister aan te sturen.
Dit was nodig omdat ik niet genoeg pinnen over had om het display aan te sturen met de IO pinnen van de PIC controller.

Het kán wel, kost alleen wat meer programmeermoeite... :)
(met 7 toetsen en 6x7 segment houd je nog pinnen over zelfs...)

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com

De PIC die ik gebruikt heb had echter niet zoveel pinnen. Is slechts een 14 pins DIL, dus onmogelijk om 16 IO pinnen te hebben :-)

maar dit:

"Multiplexen hoort in een interrupt thuis, niet met waitloops..."
leg dit nou eens uit wat doe ik dan fout dat het niet werk. hoe zit dit

ik zit nog wat meer te prutsen met deze tutorial:
http://www.studentcompanion.co.za/multiplexing-of-7-segment-displays-w…

en ik krijg het voor elkaar om het getal 67 op twee segments te krijgen.
vervolgens doe ik er 1 segment bij en probeer ik het getal 183 erop te krijgen en dat lukt ook. maar daarna probeer ik het getal 1837 erop te krijgen. en krijg ik op de eerste 3 digits het getal 045. hoe is dit nou te verklaren, dan denk ik dat ik het snap en dan dit?

[Bericht gewijzigd door gerardvbeek op 28 mei 2017 07:42:59 (62%)]

Als je multiplexen in een interrupt doet, heb je er geen omkijken meer naar, en de diplays branden mooi egaal.
Dan kun je je hoofdprogramma voor belangrijkere zaken gebruiken...

Voor C of JAL moet je niet bij mij zijn... :)

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com

Op 27 mei 2017 20:07:51 schreef gerardvbeek:
maar dit:

Leg dit nou eens uit wat doe ik dan fout dat het niet werk. hoe zit di t

Ik ben geen C-expert maar in jouw programma (post met de screenshot) is count een char en geef je die de waarde 183729 en dat kan niet. Een char kan volgens mij maximaal de waarde 255 bevatten. Daarnaast zijn je delays nogal verschillend (100 ms versus 4 seconden) en dan gaat je display wel ongelijk branden doordat 1 segment veel feller brandt dan het andere

Als je de programmeertaal niet kent probeer hem dan eerst te leren.

En zoals Arco al zegt als je zaken op interrupt basis doet dan kun je het hoofdprogramma andere zaken laten doen. Mocht je geen ervaring hebben met programmeren dan zou ik de interrupts maar even vergeten en verder bouwen op je eigen programma.