Ik zou het volgende willen bereiken;
Ik heb in hardcode vastgelegd welke volgorde er in de array CODE zou moeten, namelijk A,B,C,D.
Aan de hand van de input die gegenereerd wordt door 1 van de 4 schakelaars zou er in feite in de array PUSHED een code in moeten komen.
Ik zeg hierbij als ingang RB4 hoog wordt dan komt er de code 'A' in de array, bij RB5 komt de code 'B' , bij RB6 komt de code 'C' en bij bij RB7 komt de code 'D' de volgorde in de array PUSHED moet vastgelegd worden door welke poort er eerst, tweede, derde of als vierde (= index van PUSHED) wordt gebruikt.
De volgorde in de array PUSHED zou het zelfde moeten zijn als in array CODE om PORTC = 0b00001000 te krijgen (wat de 4de led laat branden in dit geval)
Als de array PUSHED gevuld is maar niet zoals in de array CODE dan wordt PORTC = 0b00000001 en brandt bijgevolg mijn eerste led.
het detecteren met een interrupt gebeurd via RA2 (INT).
met andere woorden dit zou een codeklavier moeten voorstellen (in code) met 4 drukknoppen en 4LED's
Het probleem;
Ik krijg het namelijk niet in werking, mijn interrupt kan wel detecteren, maar mijn 4 led's branden willekeurig ookal laat ik de 2 overige leds niet branden toch kunnen ze alle 4 aan gaan bij een interrupt...
Alvast bedankt. Wim
Ik heb in hardcode vastgelegd welke volgorde er in de array CODE zou moeten, namelijk A,B,C,D.
Aan de hand van de input die gegenereerd wordt door 1 van de 4 schakelaars zou er in feite in de array PUSHED een code in moeten komen.
Ik zeg hierbij als ingang RB4 hoog wordt dan komt er de code 'A' in de array, bij RB5 komt de code 'B' , bij RB6 komt de code 'C' en bij bij RB7 komt de code 'D' de volgorde in de array PUSHED moet vastgelegd worden door welke poort er eerst, tweede, derde of als vierde (= index van PUSHED) wordt gebruikt.
De volgorde in de array PUSHED zou het zelfde moeten zijn als in array CODE om PORTC = 0b00001000 te krijgen (wat de 4de led laat branden in dit geval)
Als de array PUSHED gevuld is maar niet zoals in de array CODE dan wordt PORTC = 0b00000001 en brandt bijgevolg mijn eerste led.
het detecteren met een interrupt gebeurd via RA2 (INT).
met andere woorden dit zou een codeklavier moeten voorstellen (in code) met 4 drukknoppen en 4LED's
Het probleem;
Ik krijg het namelijk niet in werking, mijn interrupt kan wel detecteren, maar mijn 4 led's branden willekeurig ookal laat ik de 2 overige leds niet branden toch kunnen ze alle 4 aan gaan bij een interrupt...
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
| __CONFIG(INTIO & WDTDIS & PWRTEN & MCLRDIS & UNPROTECT & UNPROTECT & BORDIS & IESODIS & FCMDIS); static unsigned char ra2_counter; const char CODE[4] = {'A', 'B', 'C', 'D'}; static char PUSHED[4]; static int ok = 0; //aantal juiste karakters static void interrupt isr(void) { if(INTF){ // RA2 External Interrupt Occur char a = ' '; if(RB4 == 1) a = 'A'; else if(RB5 == 1) a = 'B'; else if(RB6 == 1) a = 'C'; else if(RB7 == 1) a = 'D'; if(CODE[ra2_counter] == a) { ok++; //Verhoog ok met 1 => aantal getallen van de code juist } ra2_counter++; //verhoog index wachtend op volgende waarde if(ra2_counter == 4) //Wanneer volledige code dus is ingegeven { if(ok == 4) // gevuld en juiste volgorde ! { PORTC = 0b00001000; } else //PUSHED = gevuld maar geen juiste volgorde ! { PORTC = 0b00000001; } } }//endfi else return; INTF = 0; // Clear External interrupt flag } main() { TRISC = 0x00; // Set All on PORTC as Output TRISA = 0x05; //0b00001111; //RA2 input mode (digital input) TRISB = 0b11110000; // RB4,5,6,7 zijn inputs ! Is this right? ANSEL = 0b00000000; // Set PORT AN0 to AN7 digital I/O ANSELH = 0; // Set PORT AN8 to AN11 as Digital I/O /* Init ADC */ INTE = 1; //enable RA2/INT interrupts GIE = 1; //enable global interupts while (1 == 1) { }//endelihw } |
Alvast bedankt. Wim