Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

  • almightyarjen
  • Registratie: Maart 2002
  • Laatst online: 22:31

almightyarjen

When does the hurting stop?

Topicstarter
Ik ben me eens gaan verdiepen in het programmeren van PICs, heb een programmer gebouwd en heb wat proggies geflashed. Nu heb ik een probleem waarvoor ik een PIC wil gebruiken, maar ik vraag me af of ik hetgene wat ik wil wel PIC-geschikt is.

Dit is wat ik wil:
Ik heb vier bitsignalen (BCD) aangesloten op de PIC. De PIC controleert de status van de aangeboden BCD-waarde. Als deze waarde bijvoorbeeld 0001 is moet output_0 "1" worden en als deze waarde bijvoorbeeld 0010 is moet output_1 "1" worden. Even heel simpel gezegd zeg maar.

Dit is uiteraard geen probleem voor een PIC. Maar nu wil ik dat de PIC een uitgang bijvoorbeeld 5 minuten hoog houdt nadat de uitgang hoog werd als gevolg van de aangeboden BCD-waarde. Dit is ook realiseerbaar. Maar gedurende deze 5 minuten moet de PIC gewoon doorgaan met z'n programma om eventuele andere outputs hoog te maken...

En dit is volgens mij een probleem omdat een PIC zijn programma sequentieel uitvoert. Als je de PIC de opdracht geeft om een uitgang 5 minuten hoog te houden, kan je dat doen door een loop van 5 minuten. Maar dat betekent dus dat die PIC niets anders doet dan die loop afwerken en dat is niet de bedoeling...

Ik heb ervaring met de 16F628, misschien dat er een andere PIC is die dit wel aankan? Of is er een functionaliteit die ik nog niet ken?

Je kan het uiteraard oplossen met een externe timer maar ik wil het graag met één chip regelen... Dit is trouwens voor een customized fan-control...

Patreon | Main Youtube | Work In Progress Youtube


  • SA007
  • Registratie: Oktober 2002
  • Laatst online: 20-11 21:12

SA007

Moderator Tweaking
ow, dat is heel simpel.

Kijk maar 's naar de timers in je pic, kan je gewoon een timer zetten die elke sec een bepaalde procedure uitvoert.

(pseudocode)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
main {
  haal ingangen op:
  if (nieuw uitgang hoog zetten)
    uitgang(nummer) = 1;
    uitgangtijd(nummer) = 300;  //300 sec dus.
  }
}

ISR (timer interrupt) {
  for (uitgang = 0 to max) {
    if (uitgangstijd(uitgang) > 1) 
      uitgangstijd(uitgang)--;
    } elseif (uitgangstijd(uitgang) == 1) {
      uitgang(uitgang) = 0;
      uitgangstijd(uitgang) = 0;
    }
  }
}


Dat zou genoeg daarvoor moeten zijn.

  • naftebakje
  • Registratie: Februari 2002
  • Laatst online: 09:07
Daarvoor kan je interrupts (die zijn héél "krachtig") of timers (voor jou specifiek voorbeeld lukt dat wel) gebruiken. Het voorbeeld van SA007 geeft een voorbeeld van hoe je het met interrupts kan oplossen. Het belangrijkste is echter dat je goed snapt wat interrupts doen, en hoe je ze best gebruikt. Je kan enorm veel uitleg vinden, maar kort gezegd wordt een interrupt tussen de code in de main-loop (die sequentieel is) in uitgevoerd, op het moment dat er een interrupt wordt gegenereerd (door een timer, een interrupt-on-change op een ingang,...). Als je de interrupt klein genoeg houdt, dan zal de main-loop daar nooit iets van merken.

Als je bijvoorbeeld een tijd wil meten met je PIC, en die op een LCD schermpje wil weergeven, dan zal je via interrupts de ingangssignalen detecteren (want die zijn tijdskritisch, moet direct op gereageerd worden), terwijl het updaten van het LCD in de main-loop kan (want je kan de tijd gerust wat later aflezen).

Jou voorbeeldje is enorm traag in het opzicht van een µC, 5 minuten is een eeuwigheid, je kan het ook met timers oplossen, door gewoon een timer in te stellen (die bijvoorbeeld elke seconde afloopt). In de main code gebruik je dan geen wachtlussen, maar controleer je gewoon sequentieel of er op een knop wordt gedrukt, en of de timer afgelopen is (met de gepaste acties erbij). De PIC zal vele duizenden keren per seconde die loop kunnen uitvoeren, waardoor je ook een prefect werkend programma krijgt.

Als de boer zijn koeien kust, zijn ze jarig wees gerust. Varkens op een landingsbaan, leiden nooit een lang bestaan. Als de boer zich met stront wast, zijn zijn hersens aangetast. Als het hooi is in de schuur, zit het wijf bij den gebuur.


Verwijderd

Sorry voor deze misschien errug offtopicvraag, wat is een goed boek over programmeren van pic's en dan niet zo een boek met allemaal hobby voorbeeldjes die je braaf kan overnemen waar een korte uitleg bij staat. Mag best wel pittig zijn en in het engels of duits.

  • Invisible_man
  • Registratie: Juni 2006
  • Nu online
Verwijderd schreef op maandag 08 december 2008 @ 08:47:
Sorry voor deze misschien errug offtopicvraag, wat is een goed boek over programmeren van pic's en dan niet zo een boek met allemaal hobby voorbeeldjes die je braaf kan overnemen waar een korte uitleg bij staat. Mag best wel pittig zijn en in het engels of duits.
Ik weet zo één, twee, drie niet een goed boek, maar weet wel een website waar het één ander aan voorbeelden te vinden is:

http://www.microchipc.com/

  • DaWaN
  • Registratie: Oktober 2002
  • Laatst online: 08:48

DaWaN

'r you wicked ??

Verwijderd schreef op maandag 08 december 2008 @ 08:47:
Sorry voor deze misschien errug offtopicvraag, wat is een goed boek over programmeren van pic's en dan niet zo een boek met allemaal hobby voorbeeldjes die je braaf kan overnemen waar een korte uitleg bij staat. Mag best wel pittig zijn en in het engels of duits.
Een goede plek om van te beginnen is: http://www.mstracey.btinternet.co.uk/pictutorial/picmain.htm

En als je geen ASM maar C wilt doen, dan kun je beter naar AVR's kijken. De ontwikkelomgeving van AVR's is fijner en intergreerd volledig met GCC, een hele goede gratis C compiler. Bovendien zijn AVR's wat sneller. Het is WinAVR en AVR studio installeren en lekker code kloppen :)

C met PIC's kan ook maar het is lastiger, zeker omdat het opzetten van de compiler óf geld kost óf veel uitzoekwerk vereist.

If you do not change direction, you may end up where you are heading


  • almightyarjen
  • Registratie: Maart 2002
  • Laatst online: 22:31

almightyarjen

When does the hurting stop?

Topicstarter
Precies! Die heb ik ook gebruikt, heel verhelderend! Van daaruit kan je zelf wel wat klooien. Een pré is wel dat je een beetje verstand hebt van registers en geheugenlocaties...

Om ff op mijn vraag terug te komen: heeft iemand toevallig een voorbeeld van hoe je TMR0, TMR1 of TMR2 gebruikt? Ik snap het principe maar ik zie even niet dat ik die dingen ook kan gebruiken voor een timing van een paar minuten... :)

Patreon | Main Youtube | Work In Progress Youtube


  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 20-11 18:44
Als je langer wilt kunnen wachten dan de timer aankan, kun je een variabele ophogen, iedere keer dat de timer overflowt. Hoef je alleen maar even te berekenen hoever de variabele opgehoogd moet worden om aan de gewenste tijd te komen. :)

Code is correct, de functienaam moet waarschijnlijk anders.
C:
1
2
3
4
5
6
7
8
9
timer_interrupt() {
    static int count = 0;
    count++;

    if (count >= TIMER_COUNT) {
        count = 0;
        // do stuff
    }
}


edit:
ff aangepast voor bobo1on1 ;)

[ Voor 11% gewijzigd door Jaap-Jan op 08-12-2008 22:59 ]

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


  • bobo1on1
  • Registratie: Juli 2001
  • Laatst online: 19-10 00:17
Alleen count heeft nog geen type ;)

Impedance, a measure of opposition to time-varying electric current in an electric circuit.
Not to be confused with impotence.


  • naftebakje
  • Registratie: Februari 2002
  • Laatst online: 09:07
Bij mikroelektronica kan je ook wat online boeken vinden, in verschillende versies, ook in Basic.
De compilers van hun kan je trouwens gratis gebruiken tot 2K code (dus je kan je 16F628 helemaal vol programmeren), je kan dus eens met de examples spelen.

Als de boer zijn koeien kust, zijn ze jarig wees gerust. Varkens op een landingsbaan, leiden nooit een lang bestaan. Als de boer zich met stront wast, zijn zijn hersens aangetast. Als het hooi is in de schuur, zit het wijf bij den gebuur.


Verwijderd

Bedankt voor de tips!
Pagina: 1