Hey!
Microcontrollers is niet mijn ding. Ik wil het wel kunnen maar ik snap er gewoon de kloten van. Ik heb hier een oefening liggen, en ik geraak er geen wijs uit (waarschijnlijk super easy voor jullie, maar dit is echt een probleemvak voor mij...).
_________________________
Realiseer onderstaande oefening en demonstreer met de simulator.
Zorg er voor dat je code geen onnodige onderdelen bevat (resten van voorbeelden).
Voorzie je code van commentaar. Vermeld ook de gemaakte verbindingen.
Basis: Maak een ‘vermenigvuldiger’
We maken gebruik van 3 drukknoppen (zoals op het experimenteerbord: hoog signaal indien
de drukknop niet ingedrukt is, laag signaal indien ingedrukt) en 5 leds.
De drukknoppen zijn verbonden met RD7 (SW2), RD6 (SW3) en RD5 (SW4).
De leds zijn verbonden met RD0 tot en met RD4.
Geen enkele drukknop ingedrukt:
Het product van 2 getallen (x en y) wordt getoond op de leds.
Ga ervan uit dat het product maximaal 5 bits groot is. (als basis)
De waarde van x en y is bij de start 0.
Als op SW2 gedrukt wordt, dan wordt de waarde van x getoond op de leds.
Als op SW3 gedrukt wordt, dan wordt de waarde van y getoond op de leds.
Terwijl x of y getoond wordt (SW2 of SW3 ingedrukt), dan kan via SW4 de waarde van x of
y aangepast worden:
x en y wordt telkens met 1 verhoogd tot en met 6, en start dan weer bij 0
Uitbreiding 1:
Aangezien 6x6=36, en dit groter is dan 31 (=maximum te tonen op 5 leds), kan het dus toch
gebeuren dat het product te groot is. Indien het product groter is dan 31, dan moeten alle leds
samen knipperen om deze fouttoestand aan te duiden.
Uitbreiding 2:
Zorg er voor dat het knipperen op een tempo van 0.5s aan/0.5s uit gebeurt.
BASIS C-file:
#include <p18cxxx.h>
#include <delays.h>
#pragma config PLLDIV = 2
#pragma config CPUDIV = OSC1_PLL2
#pragma config USBDIV = 2
#pragma config FOSC = INTOSCIO_EC
#pragma config FCMEN = OFF
#pragma config IESO = OFF
#pragma config PWRT = ON
#pragma config BOR = ON
#pragma config BORV = 3
#pragma config VREGEN = OFF
#pragma config WDT = OFF
#pragma config WDTPS = 32768
#pragma config MCLRE = ON
#pragma config LPT1OSC = OFF
#pragma config PBADEN = OFF
#pragma config CCP2MX = ON
#pragma config STVREN = ON
#pragma config LVP = OFF
#pragma config ICPRT = OFF
#pragma config XINST = OFF
#pragma config CP0 = OFF
#pragma config CP1 = OFF
#pragma config CP2 = OFF
#pragma config CP3 = OFF
#pragma config CPB = OFF
#pragma config CPD = OFF
#pragma config WRT0 = OFF
#pragma config WRT1 = OFF
#pragma config WRT2 = OFF
#pragma config WRT3 = OFF
#pragma config WRTB = OFF
#pragma config WRTC = OFF
#pragma config WRTD = OFF
#pragma config EBTR0 = OFF
#pragma config EBTR1 = OFF
#pragma config EBTR2 = OFF
#pragma config EBTR3 = OFF
#pragma config EBTRB = OFF
#define SW2 PORTDbits.RD7
#define SW3 PORTDbits.RD6
#define SW4 PORTDbits.RD5
#define LEDS PORTD
void main(void)
{
unsigned char x,y;
unsigned char prod;
PORTD = 0b00000000;
TRISD = 0b11100000;
while(1)
{
prod = x*y;
while (!SW2)
{
LEDS = x;
while ...
}
while (!SW3)
{
LEDS = y;
while ...
}
LEDS = prod;
}
}
________________________
Kan iemand mij op weg helpen?
Alvast bedankt
greets, rebel
Wel, ik heb het op mijn eigen manier geprobeerd... maar kzit vast met het gedeelte van vermenigvuldigen. Ik heb eigenlijk 2 tellertjes gemaakt en via 2 drukknoppen kan je daar elke keer 1 bij tellen. Maar ik zit vast met de 3de poort (poort die staat voor het vermenigvuldigen). Kweet niet hoe ik aan dat gedeelte moet beginnen. Kheb al vanalles geprobeerd, maar bij de simulatie zie ik dan steeds dat het niet werkt.
------------------------
while (1)
{
if (!SW3) //gedrukt op knop, som 1 verhogen
{
if (PORTB >= 0x19) //groter dan of gelijk aan 31
PORTB = 0x0; //terug op 0 zetten
else
PORTB++; //verhogen
delay();
while(!SW3); //bezighouden tot hij afgelegd wordt
delay();
}
if (!SW4) //gedrukt op knop, som 2 verhogen
{
if (PORTC >= 0x19) //groter dan of gelijk aan 31
PORTC = 0x0; //terug op 0 zetten
else
PORTC++; //verhogen
delay();
while(!SW4); //bezighouden tot hij afgelegd wordt
delay();
}
if (!SW2) //tweede som tonen
leds=PORTC|0b10000000;
else //eerste som tonen
leds=PORTB|0b10000000;
}
}
void delay()
{
unsigned i;
for (i = 0; i < 100; i++);
}
------------------------
Ik snap eigenlijk vooral niet hoe je die waarden vermenigvuldigt 
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
eeuhm zoiets dan:
[code=C]
unsigned char X,Y,Z;
while (1)
{
while(!sw2)
{
portD = X;
if(!sw3)
{
X++;
delay();
}
}
while(!sw3)
{
portD = X;
if(!sw3)
{
Y++;
delay();
}
}
while(!sw4)
{
Z = X*Y;
if (Z > 31)
{
PortD = 31;
delay();
portD = 0;
delay();
}
else portD = Z;
}
portD = X;
}
void delay()
{
unsigned char i;
for (i = 0; i < 100; i++);
}
[/code]
//edit1:
even een foutje uit de delay routine gehaald(er bestaan meer dan 1 unsigned variabele dus kan je compiler daar inplakken wat hij wil)
//edit2:
overgens moet je nog wel even bedenken hoe je gaat zorgen dat je char niet hoger komt dan de 6(en dan weer naar 0 klapt anders moet je Z als int declareren want je product van de berekening kan dan 65536 worden;)
[Bericht gewijzigd door timmie op (19%)]