2x 7 segment display aansturen met PIC16F54

Pagina: 1
Acties:
  • 588 views

Acties:
  • 0 Henk 'm!

  • Adlan
  • Registratie: April 2005
  • Laatst online: 01-09 02:18
Dag Allemaal,
Kan me iemand helpen met het aansturen van 7 segment display (2 van 7) samen met 2 LED's m.b.v. een PIC16F54 ? Ik wil namelijk de volgende doen:

Als alles ok is, brandt de groene led en de teller doet niets. Nu zijn er bepaalde gevallen die kunnen voorkomen:
- RA1 verandert constant van hoog naar laag en omgekeerd. Als RA1 laag wordt dan moet een teller beginnen aftellen tot 20ms. Indien deze teller 20ms bereikt, moet het getal op de 7 segment display verhoogd worden en de rode led branden (door RA0 laag te zetten).
- Als de teller 20ms niet bereikt doordat RA1 terug hoog is geworden, gebeurt er niets en is alles ok.
- De 7 segment display kan gereset worden door RA3 langer dan 2 seconden laag te houden.
- RA2 verandert ook constant van hoog naar laag en omgekeerd. Als RA2 laag blijft langer dan 20 ms dan moet de rode led branden en het getal op de 7 segment display wordt NIET verhoogd.

- Als RA2 binnen 20 ms terug hoog wordt, moet er niets gebeuren.
De 7 segment display wordt door middel van multiplexing aangestuurd. De pin RB7 zorgt ervoor dat er snel tussen de twee getallen geschakeld wordt.

Het is belangrijk dat de teller begint af te tellen bij de overgangen van hoog naar laag. Er moet dus niet geteld worden als het signaal altijd laag blijft.
Hier is een deel van de pseudo code:
-----------------------------------
Inputs: RA1, RA2, RA3
Outputs: RA0, RB0…RB7
RA0 == hoog //groene led is aan
If RA0 == hoog & RA1 == laag
Teller telt tot 20 ms.
If Teller == 20 ms,
Then Verhoog_Getal();
RA0 == laag //rode led is aan
end
end

Verhoog_Getal(){ // methode om het getal op de 7 segment display te verhogen
...}



En hier is een schema dat ik heb getekend:

Afbeeldingslocatie: http://s17.postimg.org/syn5jym0b/schema.jpg

Voor het programmeren van PIC gebruik ik MPLAB X IDE v3.00. Ik had al geprobeerd in assembler te programmeren, maar ik snap er helemaal niets van 8)7 . Dus, wat er overblijft is C...

Acties:
  • 0 Henk 'm!

  • SA007
  • Registratie: Oktober 2002
  • Laatst online: 06-10 16:32

SA007

Moderator Tweaking
Welk deel lukt je specifiek niet?

Er gat niet hier iemand alles code voor je schijven dus je moet met een punt komen waar je op vastloopt.

Ik zou beginnen met ee blink-a-led project om te kijken of het je lukt de chip te programmeren en je code werkend te krijgen.
Daarna cijfers op je display en dan de timing een keer.

Ik werk ondertussen een jaar of 10 dagelijks met microcontrollers en in 1x iets geheel werkend krijgen lukt mij ook niet hoor.

Acties:
  • 0 Henk 'm!

  • memphis
  • Registratie: Oktober 2000
  • Laatst online: 22:19

memphis

48k was toen meer dan genoeg.

Of google eens de vele projecten na:
https://www.google.nl/sea...AGdxoHIBA&ved=0CAYQ_AUoAQ

Er zijn mensen die mij een GOD vinden


Acties:
  • 0 Henk 'm!

  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 01-10 11:08
Als je in C gaat programmeren, dan is dit wel een leuk topic denk ik: De μC programmers Kroeg

Paar vraagjes: Ga je met je 7 segment's multiplexen of wil je ze los aansturen (ik weet zo uit mijn hoofd niet hoeveel pins een F54 is), vermoeden is een 40 pinner.
Hoeveel ervaring heb je met c?
Ben je bekend met de timer interrupts?

Tips:
Maak eens een flowchart en ga aan de hand van de stappen die je daarin beschrijft, eens wat programmeren. Als ik zo zie wat je opschrijft, denk ik dat je op deze manier heel veel duidelijker maakt voor jezelf.
Zelf zweer ik bij MP lab IDE. MP lab X vind ik troep. Heb je de juiste plugins draaien?

[ Voor 69% gewijzigd door Pizza_Boom op 04-06-2015 20:49 ]


Acties:
  • 0 Henk 'm!

  • Ploink
  • Registratie: April 2002
  • Laatst online: 21-08 13:05
Deze PIC, vermoedelijk gebaseerd op de 16C54, is heel erg simpel en heeft slechts 0.75k programma geheugen en 25 bytes data ram. Dit programmeer je het beste in ASM, hoewel C ook wel schijnt te kunnen.

Ik zie in je schema dat je een truuk toepast om de common cathode van de displays te multiplexen op een enkele i/o pin. Bedenk wel dat de PNP transistor in deze configuratie een extra 0.6V spanning over de emitter introduceert waardoor de ene digit feller zal branden dan de andere.
Misschien kun je dit weer ondervangen door de timing aan te passen, maar liever pak je een extra i/o pin. De 1k weerstand kun je eventueel alleen op de basis van de NPN zetten, want voor de PNP als emitter volger is die niet nodig.

Voor die rood/groen led heb je geen transistoren nodig, gewoon zo in serie aansluiten:
(+)-------|rood>|-----|390|---RA0-----|390|-----|groen>|--------(-)
Bij opstart zullen ze beiden zwak branden, maar zodra je van RA0 een output maakt is slechts een van beiden aan.

Dat XTAL zo tussen Vdd en GND klopt niet helemaal ;)

[ Voor 5% gewijzigd door Ploink op 04-06-2015 21:53 ]


Acties:
  • 0 Henk 'm!

  • Sprite_tm
  • Registratie: September 2002
  • Laatst online: 11-08 04:52

Sprite_tm

Semi-Chinees

Ten eerste lijk je nergens een specifieke vraag te stellen, je klaagt alleen dat je het niet voorelkaar krijgt. GoT is geen helpdesk, tenzij je daadwerkelijke gerichte technische vragen stellen ga je niet veel antwoorden krijgen die je direct kan gebruiken. Ten tweede: dit lijkt een huiswerkopdracht en daarvan is het de bedoeling dat je 'em zelf oplost, eventueel met hulp van klasgenoten of je docent; op GoT zijn ze in ieder geval niet toegestaan. Al in al vrees ik dat ik een slotje op dit topic moet gooien.

Relaxen und watchen das blinkenlichten. | Laatste project: Ikea Frekvens oog

Pagina: 1

Dit topic is gesloten.