Mitsubishi externe temperatuur sensor (Home Assistant compatible): V&A - ClimaControl - Ook voor Panasonic & LG.
RobV schreef op maandag 24 augustus 2015 @ 09:52:
EDIT: Ik lees nu over de defecte pinnen 2 en 3.. Tja, als je board sluiting maakt wordt het lastig zoeken natuurlijk, mijn excuses.
De Micro heeft op zijn header twee lege pinnen zitten, ze zijn er wel maar doen niets. Vandaar dat ik begon over lakdraad en baantjes doorhalen, printfoutje elimineren, totdat ik die sluiting tussen PD0 en PD1 zag.
Is bekendLED-Maniak schreef op maandag 24 augustus 2015 @ 09:54:
Sterker nog, je kan i2c niet naar andere pinnen verplaatsen tenzij je gaat bitbangen.
Is dat een probleem of gewoon een uitdaging?Pizza_Boom heeft het probleem dat hij veel wilt aansluiten en dus andere dingen naar andere pinnen moet verplaatsen.
Afijn, ik ga eens kijken hoe ik die gemorste tin netjes weg krijg met mijn apparatuur.
Mitsubishi externe temperatuur sensor (Home Assistant compatible): V&A - ClimaControl - Ook voor Panasonic & LG.

Alle poortjes zijn weer los en doen het nog gewoon. Nu dus niet meer aanzitten.
Nice! Was dit nou dat bordje waar je de bootloader probeerde in te zetten, of draaide deze de code voor de ISP?Pizza_Boom schreef op maandag 24 augustus 2015 @ 16:00:
Eigenwijs? Valt wel mee toch? Gewoon met de dikke bout (nouja, dik, er zit wel een lekker puntje aan) zonder flux ofzo even een SMD dingetje fixen...
[afbeelding]
Alle poortjes zijn weer los en doen het nog gewoon. Nu dus niet meer aanzitten.
All electric components run on smoke. If you let the smoke out, they won't work anymore.
All electric components run on smoke. If you let the smoke out, they won't work anymore.
Ik kom er ook net achter waarom de power on led niet werkt op de kloon. Er missen 2 weerstandjes voor "on". Of het echt weerstandjes zijn of 0ohm jumpers, durf ik niet te zeggen.
| Mijn joystick / simpit project | Blog | Elite Dangerous CMDR Cataclysm72
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
| void interrupt_settings() { // ***INTERRUPT SETTINGS*** cli(); // disable general interrupt // ***TIMER1 INTERRUPT SETTINGS*** TCCR1A = 0; TCCR1B = 0; OCR1A = 155; // ((16M/256)/400)-1 = 400 Hz TCCR1B |= (1 << WGM12); // CTC enable TCCR1B |= (1 << CS12); // prescaler /256 TIMSK1 |= (1 << OCIE1A); // enable timer1 interrupt flag by CTC // ***PIN CHANGE INTERRUPT SETTINGS*** PCICR |= (1 << PCIE0); // enable pin change interrupt 0 PCMSK0 = 0b10000000; // enable interrupt pins PCINT7 (portB7) - PCINT0 (portB0), PB7 PCI = enabled sei(); // reenable general interupt } ISR(PCIO_vect) { //doe actie } |
Meteen de interrupt settings maar even naar een aparte routine gehaald, dat geklooi telkens in settings. Nu een mooi handzaam routinetje waar het overzicht mooi bewaard blijft.
All electric components run on smoke. If you let the smoke out, they won't work anymore.
Vergeet je ook je timer interrupt niet?PCINT0
Pin Change Interrupt Request 0
Mitsubishi externe temperatuur sensor (Home Assistant compatible): V&A - ClimaControl - Ook voor Panasonic & LG.
Die heb ik, om het stukje geposte code niet te groot te maken, gewoon weggelaten van het forum, die zit onder het stukje van de button. Ik vind de knop vooralsnog belangrijker dan een interrupt die 1/1000ste van een seconde later schakelt.LED-Maniak schreef op maandag 24 augustus 2015 @ 21:47:
Vergeet je ook je timer interrupt niet?
Dus toch. Ik kwam hierop omdat bij 11.1.5 staat:SnowDude schreef op maandag 24 augustus 2015 @ 21:45:
Volegns mij is het pcint0_vect
The corresponding interrupt of Pin Change Interrupt Request is executed from the PCI0 Interrupt Vector.
Voor de micro is dat als het goed is de file iom32u4,h daar staat het volgende:
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
| /* Interrupt Vectors */ /* Interrupt Vector 0 is the reset vector. */ #define INT0_vect_num 1 #define INT0_vect _VECTOR(1) /* External Interrupt Request 0 */ #define INT1_vect_num 2 #define INT1_vect _VECTOR(2) /* External Interrupt Request 1 */ #define INT2_vect_num 3 #define INT2_vect _VECTOR(3) /* External Interrupt Request 2 */ #define INT3_vect_num 4 #define INT3_vect _VECTOR(4) /* External Interrupt Request 3 */ #define INT6_vect_num 7 #define INT6_vect _VECTOR(7) /* External Interrupt Request 6 */ #define PCINT0_vect_num 9 #define PCINT0_vect _VECTOR(9) /* Pin Change Interrupt Request 0 */ #define USB_GEN_vect_num 10 #define USB_GEN_vect _VECTOR(10) /* USB General Interrupt Request */ #define USB_COM_vect_num 11 #define USB_COM_vect _VECTOR(11) /* USB Endpoint/Pipe Interrupt Communication Request */ #define WDT_vect_num 12 #define WDT_vect _VECTOR(12) /* Watchdog Time-out Interrupt */ #define TIMER1_CAPT_vect_num 16 #define TIMER1_CAPT_vect _VECTOR(16) /* Timer/Counter1 Capture Event */ #define TIMER1_COMPA_vect_num 17 #define TIMER1_COMPA_vect _VECTOR(17) /* Timer/Counter1 Compare Match A */ #define TIMER1_COMPB_vect_num 18 #define TIMER1_COMPB_vect _VECTOR(18) /* Timer/Counter1 Compare Match B */ #define TIMER1_COMPC_vect_num 19 #define TIMER1_COMPC_vect _VECTOR(19) /* Timer/Counter1 Compare Match C */ #define TIMER1_OVF_vect_num 20 #define TIMER1_OVF_vect _VECTOR(20) /* Timer/Counter1 Overflow */ #define TIMER0_COMPA_vect_num 21 #define TIMER0_COMPA_vect _VECTOR(21) /* Timer/Counter0 Compare Match A */ #define TIMER0_COMPB_vect_num 22 #define TIMER0_COMPB_vect _VECTOR(22) /* Timer/Counter0 Compare Match B */ #define TIMER0_OVF_vect_num 23 #define TIMER0_OVF_vect _VECTOR(23) /* Timer/Counter0 Overflow */ #define SPI_STC_vect_num 24 #define SPI_STC_vect _VECTOR(24) /* SPI Serial Transfer Complete */ #define USART1_RX_vect_num 25 #define USART1_RX_vect _VECTOR(25) /* USART1, Rx Complete */ #define USART1_UDRE_vect_num 26 #define USART1_UDRE_vect _VECTOR(26) /* USART1 Data register Empty */ #define USART1_TX_vect_num 27 #define USART1_TX_vect _VECTOR(27) /* USART1, Tx Complete */ #define ANALOG_COMP_vect_num 28 #define ANALOG_COMP_vect _VECTOR(28) /* Analog Comparator */ #define ADC_vect_num 29 #define ADC_vect _VECTOR(29) /* ADC Conversion Complete */ #define EE_READY_vect_num 30 #define EE_READY_vect _VECTOR(30) /* EEPROM Ready */ #define TIMER3_CAPT_vect_num 31 #define TIMER3_CAPT_vect _VECTOR(31) /* Timer/Counter3 Capture Event */ #define TIMER3_COMPA_vect_num 32 #define TIMER3_COMPA_vect _VECTOR(32) /* Timer/Counter3 Compare Match A */ #define TIMER3_COMPB_vect_num 33 #define TIMER3_COMPB_vect _VECTOR(33) /* Timer/Counter3 Compare Match B */ #define TIMER3_COMPC_vect_num 34 #define TIMER3_COMPC_vect _VECTOR(34) /* Timer/Counter3 Compare Match C */ #define TIMER3_OVF_vect_num 35 #define TIMER3_OVF_vect _VECTOR(35) /* Timer/Counter3 Overflow */ #define TWI_vect_num 36 #define TWI_vect _VECTOR(36) /* 2-wire Serial Interface */ #define SPM_READY_vect_num 37 #define SPM_READY_vect _VECTOR(37) /* Store Program Memory Read */ #define TIMER4_COMPA_vect_num 38 #define TIMER4_COMPA_vect _VECTOR(38) /* Timer/Counter4 Compare Match A */ #define TIMER4_COMPB_vect_num 39 #define TIMER4_COMPB_vect _VECTOR(39) /* Timer/Counter4 Compare Match B */ #define TIMER4_COMPD_vect_num 40 #define TIMER4_COMPD_vect _VECTOR(40) /* Timer/Counter4 Compare Match D */ #define TIMER4_OVF_vect_num 41 #define TIMER4_OVF_vect _VECTOR(41) /* Timer/Counter4 Overflow */ #define TIMER4_FPF_vect_num 42 #define TIMER4_FPF_vect _VECTOR(42) /* Timer/Counter4 Fault Protection Interrupt */ #define _VECTORS_SIZE (43 * 4) |
All electric components run on smoke. If you let the smoke out, they won't work anymore.
Afijn, op mijn pininterrupt wordt de hele processor gereset, zo lijkt het. De teller springt iedere keer als de knop hoog is, terug naar de gedefinieerde beginwaarde. En dat is best vervelend als je alleen je teller wilt omkeren.
De stukken code waar het om gaat:
Declaratie variabelen:
1
2
3
| volatile int teller = 100; volatile int LOOPDIRECTION = 1; volatile int KNOBSTATE = 0; |
Interrupt:
1
2
3
4
| ISR(PCINTO_vect) { KNOBSTATUS(); } |
KNOBSTATUS:
1
2
3
4
5
6
7
8
9
10
| void KNOBSTATUS() { // KNOBSTATE = digitalRead(KNOB); // if (KNOBSTATE == 1) // { LOOPDIRECTION ^= 0x01; // } // while (digitalRead(KNOB) == 1){} } |
Gedeelte waarin deze gebruikt wordt, de normale loop:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| void loop() { unsigned long NuMilli = millis(); if (NuMilli - VorigeMilli > interval) { if (LOOPDIRECTION == 0) { if(teller == 0) teller = 100; teller--; } if (LOOPDIRECTION == 1) { if(teller == 100) teller = 0; teller++; } segment1 = (teller/10); // Display 1 is meest rechts segment2 = (teller%10); // Display 2 van rechts VorigeMilli = NuMilli; } } |
[ Voor 5% gewijzigd door Pizza_Boom op 24-08-2015 23:56 ]
En waarom gebruik je upper case voor variabelen? Geeft verwarring.
[ Voor 23% gewijzigd door mcDavid op 25-08-2015 10:51 ]
- kleineLetter (camel case) voor lokale variabelen
- HOOFDLETTERS (upper case) voor constanten
- BeginnenMetHoofdletter (pascal case) voor types (structs, classes, enums)
| Mijn joystick / simpit project | Blog | Elite Dangerous CMDR Cataclysm72
All electric components run on smoke. If you let the smoke out, they won't work anymore.
Dat deed ik vroeger bij private class variabelen, maar nooit bij locals.SnowDude schreef op dinsdag 25 augustus 2015 @ 13:48:
Mijn lokale variabelen beginnen altijd met een underscore met uitzondering van loopcounters i en j
| Mijn joystick / simpit project | Blog | Elite Dangerous CMDR Cataclysm72
Maar... Afgezien van of het sneller en minder omslachtig is, het zou toch gewoon moeten werken op deze manier? Want nu werkt mijn button als een resetknop, in plaats van als een richting-veranderend knopje.mcDavid schreef op dinsdag 25 augustus 2015 @ 10:50:
Waarom is je loopdirection niet gewoon +1 of -1? Hoef je in je loop alleen maar teller += loopdirection te doen.
[ Voor 9% gewijzigd door mcDavid op 25-08-2015 15:20 ]
Heb je de pin wel als input gezet(waarschijnlijk wel, toch even checken
Mitsubishi externe temperatuur sensor (Home Assistant compatible): V&A - ClimaControl - Ook voor Panasonic & LG.
Ik neem aan van niet. Toen ik hem gewoon in het programma had en hem dus eigenlijk aan het pollen was, werkte het wel gewoon. Alleen zat ik er zo nu en dan naast en dat wil ik eruit hebben, dus vandaar dat ie naar de interrupt gegaan is.mcDavid schreef op dinsdag 25 augustus 2015 @ 15:20:
Ik ben niet zo'n held met bitwise operators (is ^= zeker weten geldig?) maar volgens mij wel ja. Heb je geen hardware fouten? Als je button bijvoorbeeld ergens iets kortsluit heb je kans dat je gewoon een brownout creëert.
Zit gewoon clean aangesloten. Knop aan de plus en een 10k pull down aan de Arduino kant. Zo dus:

Volgens mij wel. Ik heb hem KNOB genoemd middels een const int en vervolgens met pinmode naar input gezet: pinMode(KNOB, INPUT);LED-Maniak schreef op dinsdag 25 augustus 2015 @ 15:23:
^= is gewoon correct.
Heb je de pin wel als input gezet(waarschijnlijk wel, toch even checken).
Ook een grappig verschijnsel: Houd ik de knop ingedrukt, dan valt hij naar 0 en gaat ie weer opnieuw tellen. Laat ik hem weer los, dan telt ie weer opnieuw vanaf 0.
[ Voor 7% gewijzigd door Pizza_Boom op 25-08-2015 16:17 ]
All electric components run on smoke. If you let the smoke out, they won't work anymore.
En waar de interne pull ups geschakeld worden, weet ik niet. Maar zo gaat het ook, ik heb nog iets van 1200 10k weerstanden liggen.
[ Voor 39% gewijzigd door Pizza_Boom op 25-08-2015 17:06 ]
pinMode(pin, INPUT_PULLUP);
All electric components run on smoke. If you let the smoke out, they won't work anymore.
Edit: Dit is de code tot nu toe. Alleen de segmentcounter eruit gehaald, dat is 12x poortjes aansturen en staat al in dit topic, anders wordt m'n post helemaal zo lang. En die werkt probleemloos.
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
| #include <avr/interrupt.h> const int SEG7A = 2; //PORT D1 const int SEG7B = 3; //PORT D0 const int SEG7C = 7; //PORT E6 const int SEG7D = 6; //PORT D7 const int SEG7E = 5; //PORT C6 const int SEG7F = 13; //PORT C7 const int SEG7G = 4; //PORT D4 const int SEG7DOT = 8;//PORT B4 const int SEL1 = A2; //PORT F5 const int SEL2 = A1; //PORT F6 const int KNOB = 11; //PORT B7 unsigned char segment; int segment1; int segment2; volatile int teller; volatile int LOOPDIRECTION = 1; volatile int KNOBSTATE = 0; long VorigeMilli = 0; long interval = 1000; void setup() { pinMode(SEG7A, OUTPUT); pinMode(SEG7B, OUTPUT); pinMode(SEG7C, OUTPUT); pinMode(SEG7D, OUTPUT); pinMode(SEG7E, OUTPUT); pinMode(SEG7F, OUTPUT); pinMode(SEG7G, OUTPUT); pinMode(SEG7DOT, OUTPUT); pinMode(SEL1, OUTPUT); pinMode(SEL2, OUTPUT); pinMode(KNOB, INPUT_PULLUP); interrupt_settings(); } void interrupt_settings() { // ***INTERRUPT SETTINGS*** cli(); // disable general interrupt // ***TIMER1 INTERRUPT SETTINGS*** TCCR1A = 0; // Set timer/counter1 control register A to 0 TCCR1B = 0; // Set timer/counter1 control register B to 0 OCR1A = 155; // ((16M/256)/400)-1 = 400 Hz TCCR1B |= (1 << WGM12); // CTC enable TCCR1B |= (1 << CS12); // prescaler /256 TIMSK1 |= (1 << OCIE1A); // enable timer1 interrupt flag by CTC // ***PIN CHANGE INTERRUPT SETTINGS*** PCICR |= (1 << PCIE0); // enable pin change interrupt 0 PCMSK0 = 0b10000000; // enable interrupt pins PCINT7 (portB7) - PCINT0 (portB0), PB7 PCI = enabled sei(); // reenable general interupt } ISR(PCINTO_vect) { KNOBSTATUS(); } ISR(TIMER1_COMPA_vect) { static unsigned char HuidigSegment =0; switch (HuidigSegment++) { case 0: PORTF &=~(1<<PF6); segment = segment1; segmentcounter(); PORTF |= (1<<PF5); break; case 1: PORTF &=~(1<<PF5); segment = segment2; segmentcounter(); PORTF |= (1<<PF6); break; } if(HuidigSegment >= 2) HuidigSegment = 0; } void loop() { unsigned long NuMilli = millis(); if (NuMilli - VorigeMilli > interval) { if (LOOPDIRECTION == 0) { if(teller == 0) teller = 100; teller--; } if (LOOPDIRECTION == 1) { if(teller == 100) teller = 0; teller++; } segment1 = (teller/10); // Display 1 is meest rechts segment2 = (teller%10); // Display 2 van rechts VorigeMilli = NuMilli; } } void KNOBSTATUS() { // KNOBSTATE = digitalRead(KNOB); // if (KNOBSTATE == 1) // { LOOPDIRECTION ^= 0x01; // } // while (digitalRead(KNOB) == 1){} } void segmentcounter(){} |
[ Voor 91% gewijzigd door Pizza_Boom op 25-08-2015 17:22 ]
1
| LOOPDIRECTION ^= 0x01; |
deden wij altijd met een boolean. Dan snap je tenminste wat er staat.
1
| LOOPDIRECTION = !LOOPDIRECTION; |
Verder is het handig om ook de naam van de variabele zo te nemen dat je ook snapt wat 'ie doet:
1
2
3
4
5
6
| isCountingUp = !isCountingUp; if(isCountingUp) { ...etc } |
Maarja, wie ben ik
| Mijn joystick / simpit project | Blog | Elite Dangerous CMDR Cataclysm72
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
Iemand die praktische tips geeft. Maar mijn grootste zorg nu is het telkens gereset worden van dat ding. Dat vind ik eigenlijk veel irritanter. Jouw punten neem ik mee en als ik weer e.e.a. herschrijf, pas ik dat aan.RobV schreef op dinsdag 25 augustus 2015 @ 17:36:
Maarja, wie ben ik
Reageer je op mij of op een vorige pagina? Ik kan je reactie niet helemaal plaatsen.Sebazzz schreef op dinsdag 25 augustus 2015 @ 17:46:
Klopt, compilers zijn tegenwoordig dermate efficient dat je jezelf echt voor de gek houdt als je denk dat je betere code schrijft. Wil niet zeggen dat niet niet kan natuurlijk.
[ Voor 5% gewijzigd door Pizza_Boom op 25-08-2015 21:59 ]
Verwijderd
kan je niet beter een apart topic voor dit project openen ? heb je alles bij elkaar en wordt eea overzichtelijker .. tis maar een ideePizza_Boom schreef op dinsdag 25 augustus 2015 @ 21:58:
[...]
. Jouw punten neem ik mee en als ik weer e.e.a. herschrijf, pas ik dat aan.
[...]
Reageer je op mij of op een vorige pagina? Ik kan je reactie niet helemaal plaatsen.
Krijg ik dan geen MODje over me heen die zegt dat dit in het centrale Arduinotopic thuis hoort?Verwijderd schreef op dinsdag 25 augustus 2015 @ 22:11:
[...]
kan je niet beter een apart topic voor dit project openen ? heb je alles bij elkaar en wordt eea overzichtelijker .. tis maar een idee
Verwijderd
oei, dat weet ik ook niet, ik volg jullie en vind eea leerzaam, maar als je me nu vraagt wat is het einddoel ben ik dat even kwijtPizza_Boom schreef op dinsdag 25 augustus 2015 @ 22:16:
[...]
Krijg ik dan geen MODje over me heen die zegt dat dit in het centrale Arduinotopic thuis hoort?
[ Voor 49% gewijzigd door Pizza_Boom op 25-08-2015 22:23 ]
| Mijn joystick / simpit project | Blog | Elite Dangerous CMDR Cataclysm72
Lijkt toch wel verdomd veel op wat er bij mij gebeurt. Alleen jammer dat er bij de diverse interrupt vectoren en bijbehorende ICs geen 32U4 staat...If an unexpected interrupt occurs (interrupt is enabled and no handler is installed, which usually indicates a bug), then the default action is to reset the device by jumping to the reset vector.


Ik dacht even het probleem met de bootloader branden gevonden te hebben (pin 10, 11 en 12 zijn geen SPI op de Micro), maar ik houd nog steeds problemen. Inmiddels ben ik zo ver dat ik de volgende melding krijg:
Yikes! Invalid device signature. Double check connections and try again, or use -F to override this check.
Kleine uitleg: https://petervanhoyweghen...duinoisp-on-the-leonardo/ Deze blijkt erg nuttig te zijn. Wel e.e.a. aan moeten passen naar Micro i.p.v. Leonardo en mijn COMpoort handmatig naar 1 moeten zetten (anders kon het device niet geopend worden). Alleen de Yikes melding krijg ik nu niet opgelost.
Voordat ik hem ging inbouwen, dacht ik hem eerst even te testen. Was uiteindelijk ook een slim idee ook reden (sorry voor de redelijk slechte kwaliteit, had geen betere camera in de buurt liggen);

Er zat een kortsluiting tussen de D+ en D-

[ Voor 13% gewijzigd door BladeSlayer1000 op 27-08-2015 15:00 ]
Top.. Ik vraag me toch echt af hoe het je lukt om de chip gebrickt te krijgen.Pizza_Boom schreef op donderdag 27 augustus 2015 @ 21:03:
En we zijn weer unbricked. Nu nog eens uitzoeken waarom mijn pin change interrupt het niet doet.
| Mijn joystick / simpit project | Blog | Elite Dangerous CMDR Cataclysm72
Ja, dat vraag ik mij deze keer ook af. Hij werd herstart (zonder dat ik de opdracht gaf) en toen kreeg ik de melding dat het USB apparaat niet herkend werd.RobV schreef op donderdag 27 augustus 2015 @ 21:46:
[...]
Top.. Ik vraag me toch echt af hoe het je lukt om de chip gebrickt te krijgen.


[ Voor 5% gewijzigd door Pizza_Boom op 28-08-2015 00:28 ]
Misschien is er iets verkeerd gegaan met het uploaden, waardoor een deel van de code corrupt was, dit heb ik 2* gehad met als gevolg uren zoekwerk waarom het niet werkte

Kan je eens goed kijken naar het exacte type atmega die op je board zit? Het lijk wel als of die afwijkt van wat de software verwacht.Pizza_Boom schreef op donderdag 27 augustus 2015 @ 02:08:
Zoals ik in de kroeg al zei: weer gebrickt.![]()
![]()
Ik dacht even het probleem met de bootloader branden gevonden te hebben (pin 10, 11 en 12 zijn geen SPI op de Micro), maar ik houd nog steeds problemen. Inmiddels ben ik zo ver dat ik de volgende melding krijg:
Yikes! Invalid device signature. Double check connections and try again, or use -F to override this check.
Kleine uitleg: https://petervanhoyweghen...duinoisp-on-the-leonardo/ Deze blijkt erg nuttig te zijn. Wel e.e.a. aan moeten passen naar Micro i.p.v. Leonardo en mijn COMpoort handmatig naar 1 moeten zetten (anders kon het device niet geopend worden). Alleen de Yikes melding krijg ik nu niet opgelost.
All electric components run on smoke. If you let the smoke out, they won't work anymore.
Ik snap er geen reet vanPizza_Boom schreef op vrijdag 28 augustus 2015 @ 00:16:
(ik heb de break die erin zat door de while die aangeroepen werd door de interrupt eruit gegooid, dat hield de andere interrupt tegen
| Mijn joystick / simpit project | Blog | Elite Dangerous CMDR Cataclysm72
Of heb je in de functie die gestart wordt vanuit de interrupt een while loop gehangen ofzo?
Je kunt vaak beter de interrupt service routine zo kort mogelijk houden en een status-vlag daarin zetten omdat andere interrupts niet doorkomen zolang de programcounter in een interrupt service routine staat
MEGA32U4. Had ook niets anders verwacht van een genuine Arduino boardje.SnowDude schreef op vrijdag 28 augustus 2015 @ 08:06:
[...]
Kan je eens goed kijken naar het exacte type atmega die op je board zit? Het lijk wel als of die afwijkt van wat de software verwacht.
Ik had een routine omgebouwd van pollen naar while, maar bij het pollen stond er een while in die de knop vasthouden registreerde en dus op die manier zorgde dat het tellen niet ging pingelen. Werkte prima, want de interrupt voor het multiplexen bleef gewoon doortellen.
Met de interrupt op de knop zat die while er nog en ook dat werkte, maar de andere interrupt (voor het multiplexen) werd niet aangeroepen. Die while is dus onnodig in de interrupt. Dat is het enige dat ik eruit gesloopt heb, de rest van de interrupt en het programma is hetzelfde en werkt na de nieuwe bootloader branden dus wel. Kortom, vaag verhaal, ook omdat ie gebrickt is terwijl ik er niets mee deed.
| Mijn joystick / simpit project | Blog | Elite Dangerous CMDR Cataclysm72
Zucht, domme fout. Had een ledje extra aan mijn arduino gehangen om de button te testen, had ik die tot input gebombardeerd. Goh, gek hè, dat ie het dan niet doet.


Inmiddels doet ie het wel en de Micro herkent gewoon de knop op 17, maar ook als ik hem SS (het is de slave select pin waarop die nu zit) of KNOB (zo heb ik hem gedefinieerd) noem. Dat is dan wel weer mooi.
Dat zal ook de reden zijn dat hij bricked leek omdat communicatie ook met interrupts wordt afhandeld.
[ Voor 23% gewijzigd door BoAC op 28-08-2015 13:33 ]
Als dat zo was geweest dan had ik hem gewoon nog moeten zien in mijn USB gedeelte, dat was ook weg. Ik kreeg de melding dat er een onherkenbaar USB apparaat was aangesloten en in de code van dat moment zat die while niet in de interrupt(die had ik met commentaar eruit gegooid).BoAC schreef op vrijdag 28 augustus 2015 @ 13:32:
Een interrupt routine moet zo snel mogelijk worden afgehandeld, omdat andere interrupts niet worden afgehandeld: https://sites.google.com/...ooks/avr-guide/interrupts
Dat zal ook de reden zijn dat hij bricked leek omdat communicatie ook met interrupts wordt afhandeld.
Onderstaande code eindigt nooit.
1
2
3
| while(true) { } |
De 'nutteloze break' waar jij het over had is de nooduitgang.
1
2
3
4
5
| while(true) { if(somethingsomething) break; } |
is WEL eindig. De break springt namelijk uit de lus. Haal je die break weg (en doe je niets dat de while laat stoppen) dan zit je dus ALTIJD in je interrupt vector.
En zoals BOAC schrijft. Doe geen lastige dingen in je interrupt. En dus ook geen dingen die langer dan enkele microseconden duren. En dus zeker geen 'wacht totdat ik het knop weer loslaat'.
| Mijn joystick / simpit project | Blog | Elite Dangerous CMDR Cataclysm72
Ik moet mijn woorden echt eens zorgvuldiger kiezen.

Blijft voor mij dus alleen de vraag waarom het opeens is ontstaan zonder het veranderen van code of überhaupt het uploaden van code.
Die USB.. Dat is toch puur voor de bootloader en het inladen van je code?Pizza_Boom schreef op vrijdag 28 augustus 2015 @ 14:00:
[...]
Als dat zo was geweest dan had ik hem gewoon nog moeten zien in mijn USB gedeelte, dat was ook weg. Ik kreeg de melding dat er een onherkenbaar USB apparaat was aangesloten en in de code van dat moment zat die while niet in de interrupt(die had ik met commentaar eruit gegooid).
Dat heeft er niets mee te maken of je nu een endless loop in je interrupt hebt staan of niet(tenzij je een of andere vage handeling uit moet halen om hem in programmeer modus te krijgen).
Mitsubishi externe temperatuur sensor (Home Assistant compatible): V&A - ClimaControl - Ook voor Panasonic & LG.
Ja en nee. Rob haalt het terecht aan, het zit in 1 chip. Niet, zoals bij de ATMega238's, dat er een aparte USB chip nodig is, de 32U4 handelt dit zelf af. Dit betekent ook dat het resettrucje bij het branden van de bootloader niet werkt, de Micro en Leonardo hebben na een reset ongeveer 8 seconde nodig om weer volledig tot leven te komen. In die tijd zijn ze ook niet benaderbaar. Ik kan bijvoorbeeld niet direct na het uploaden op serial monitor drukken, dat levert een foutmelding. Ga ik daarna nog een keer naar het menu voor de serial monitor, dan doet deze het wel.LED-Maniak schreef op vrijdag 28 augustus 2015 @ 14:24:
[...]
Die USB.. Dat is toch puur voor de bootloader en het inladen van je code?
Dat heeft er niets mee te maken of je nu een endless loop in je interrupt hebt staan of niet(tenzij je een of andere vage handeling uit moet halen om hem in programmeer modus te krijgen).
Dus het klinkt heel reëel dat als je hem in een endless interrupt gooit, de interrupt van de serial (waarop de USB zit) niet meer binnen komt.
EDIT: Maar ik ben er ook van overtuigd dat bij de vorige bootloader branden actie er iets is fout gegaan. Anders zou een programma dat vorige week niet werkte, het nu nog steeds niet doen. En dat is niet het geval, de pin change interrupt werkt nu wel zonder reset van de processor.
[ Voor 11% gewijzigd door Pizza_Boom op 29-08-2015 02:33 ]
Dan is die asp die je besteld hebt wel erg handig ja..
Mitsubishi externe temperatuur sensor (Home Assistant compatible): V&A - ClimaControl - Ook voor Panasonic & LG.
Over tijdje is mijn 1e project een ledstrip als nachtlampje die onder bed wordt geplakt en aansturing middels bewegingssensor en donker-sensor!
Hierbij maak ik gebruik van de sketch 'ReadAndWrite', dat is standaard meegeleverd. Om een of andere reden kan hij geen nieuwe gegevens overschrijven naar het pasje wat erbij zat, maar wel naar de blauwe rfid tag..
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
| Scan a MIFARE Classic PICC to demonstrate read and write. Using key (for A and B):BEWARE: Data will be written to the PICC, in sector #1 Card UID: B3 CD 5F 00 PICC type: MIFARE 1KB Authenticating using key A... Current data in sector: 1 7 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF [ 0 0 1 ] 6 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 5 20 20 20 20 20 20 20 20 20 20 20 20 20 20 00 00 [ 0 0 0 ] 4 4A 6F 72 64 79 20 20 20 20 20 20 20 20 20 20 20 [ 0 0 0 ] Reading data from block 4 ... Data in block 4: 4A 6F 72 64 79 20 20 20 20 20 20 20 20 20 20 20 Authenticating again using key B... Writing data into block 4 ... 01 02 03 04 05 06 07 08 08 09 FF 0B 0C 0D 0E 0F MIFARE_Write() failed: A MIFARE PICC responded with NAK. Reading data from block 4 ... MIFARE_Read() failed: Timeout in communication. Data in block 4: 30 04 26 EE 79 20 20 20 20 20 20 20 20 20 20 20 Checking result... Number of bytes that match = 0 Failure, no match :-( perhaps the write didn't work properly... |
Al wezen zoeken op het internet, en nergens vind ik een duidelijke oplossing. Heeft iemand een idee?
[ Voor 4% gewijzigd door BladeSlayer1000 op 29-08-2015 21:09 ]
Het verzenden van de info gaat naar mijn idee goed, maar ik vermoed dat ik ergens een denkfout maak in de ontvangst van het IR signaal.
Een 'schot' werkt met één startbit van 2000 µs, een 'payload' van 8 bits ( een 1 is 1000 µs en een 0 is 400 µs) en een endbit van 3000 µs.
Omdat een gun niet alleen maar kan wachten op inkomende schoten maar ook wel eens zelf wilt schieten starts 'SenseIR' met een if.
Nu is in die tutorial de PulseIn een timeout van 50 µs gegeven.
Ik krijg nu helemaal geen schot binnen op de andere gun behalve als ik die timeout drastisch ga verhogen naar 10000 µs of meer. Dit heeft als effect dat soms schoten niet worden verzonden omdat hij staat te wachten op een inkomend schot.
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
| int startBit = 2000; // This pulse sets the threshold for a transmission start bit int endBit = 3000; // This pulse sets the threshold for a transmission end bit int one = 1000; // This pulse sets the threshold for a transmission that represents a 1 int zero = 400; // This pulse sets the threshold for a transmission that represents a 0 void senseIR() { int who[4]; int what[4]; int end; if (pulseIn(sensorPin, LOW, 50) < startBit) { digitalWrite(blinkPin, LOW); ret[0] = -1; return; } Serial.println("Found shot"); digitalWrite(blinkPin, HIGH); who[0] = pulseIn(sensorPin, LOW); who[1] = pulseIn(sensorPin, LOW); who[2] = pulseIn(sensorPin, LOW); who[3] = pulseIn(sensorPin, LOW); what[0] = pulseIn(sensorPin, LOW); what[1] = pulseIn(sensorPin, LOW); what[2] = pulseIn(sensorPin, LOW); what[3] = pulseIn(sensorPin, LOW); end = pulseIn(sensorPin, LOW); if (end <= endBit) { Serial.print(end); Serial.println(" : bad end bit"); ret[0] = -1; return; } |
^^ is deel van de code.
Ik snap niet hoe dit in het origineel heeft kunnen werken. De originele 50 µs timeout bij het wachten op de startbit is nooit lang genoeg geweest om de startBit uberhaupt te kunnen ontvangen.
| Mijn joystick / simpit project | Blog | Elite Dangerous CMDR Cataclysm72
Snap ik, maar wil ook geen lappen code posten met 'euh, ik snap het niet.'RobV schreef op maandag 31 augustus 2015 @ 18:03:
Fouten vinden is heel lastig als je maar een deel van de code hebt... Je hebt het over een timeout maar die zie ik hier niet terug. Als je je code te lang vindt voor een post, pak dan pastebin of zet het op github/bitbucket.
De timeout zit in regel 11 van de code in mijn vorige post en hieronder. Die PulseIn(sensorPin, LOW, 50) is volgens de documentatie van Arduino een 50 µs timeout om te kijken of er een trigger is.
1
2
3
4
5
| if (pulseIn(sensorPin, LOW, 50) < startBit) { digitalWrite(blinkPin, LOW); ret[0] = -1; return; } |
Pastebin van de volledige code, maar dat is een heel verhaal.
Zodoende een Arduino Uno, ethernetschield, relaisprintje, tft schermpje en een RTC module gekocht samen met wat aansluit spul en breadbordje.
Dingen als ethernet en schermpje zijn van later belang, en een tempratuur sensor is ook nog onderweg.
Maar nu komt het, ik kan toch nergens voorbeelden vinden waar ik duidelijk uit word hoe ik dit alles netjes aan elkaar kan knopen en het laten werken. Zover nu krijg ik het voor elkaar om de relais te laten schakelen, op de interne klok, en hij krijgt netjes de RTC tijd binnen die ik ingesteld heb.
Alleen hoe ik dit toch aan elkaar kan knopen zodat ik hem op verschillende tijden kan laten schakelen?
Heb wel wat ervaring met PLC, maar de siemens systemen zijn in de basis toch een heel stuk simpeler te programmeren met drag en drop software erbij.
Iemand die me een handje opweg kan helpen met een duidelijke tuturial of iets?
Mitsubishi externe temperatuur sensor (Home Assistant compatible): V&A - ClimaControl - Ook voor Panasonic & LG.
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
| #include <DS1302.h> #include <RTCTimer.h> RTCTimer timer; // Init the DS1302 DS1302 rtc(7, 8, 9); void setup() { pinMode(10, OUTPUT);// Relais 1 Daglicht pinMode(11, OUTPUT);// Relais 2 Nachtlicht pinMode(12, OUTPUT);// Relais 3 Koeling pinMode(13, OUTPUT);// Relais 4 Ongebruikt // Set the clock to run-mode, and disable the write protection rtc.halt(false); rtc.writeProtect(false); // Setup Serial connection Serial.begin(9600); // The following lines can be commented out to use the values already stored in the DS1302 rtc.setTime(13, 30, 0); // Set the time to 12:00:00 (24hr format) } void loop() { if (Time > 13, 30, 20) digitalWrite(10, HIGH); // relais 1 On if (Time > 13, 30, 40) digitalWrite(10, LOW); // relais 1 Off } // Send time Serial.println(rtc.getTimeStr()); // Wait one second before repeating :) delay (1000); } |
En de foutcode,
1
2
3
4
5
6
7
8
| sketch_aug30e.ino: In function 'void loop()': sketch_aug30e:35: error: expected primary-expression before '>' token sketch_aug30e:36: error: expected primary-expression before '>' token sketch_aug30e.ino: At global scope: sketch_aug30e:41: error: 'Serial' does not name a type sketch_aug30e:44: error: expected constructor, destructor, or type conversion before '(' token sketch_aug30e:45: error: expected declaration before '}' token expected primary-expression before '>' token |
Sowieso staan je laatste Serial en die delay buiten je loop. Die laatste } sluit niets af.TerminalNL schreef op maandag 31 augustus 2015 @ 20:26:
Dit is wat ik tot nu toe heb, maar hij wilt hem niet goedkeuren?
code:
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 #include <DS1302.h> #include <RTCTimer.h> RTCTimer timer; // Init the DS1302 DS1302 rtc(7, 8, 9); void setup() { pinMode(10, OUTPUT);// Relais 1 Daglicht pinMode(11, OUTPUT);// Relais 2 Nachtlicht pinMode(12, OUTPUT);// Relais 3 Koeling pinMode(13, OUTPUT);// Relais 4 Ongebruikt // Set the clock to run-mode, and disable the write protection rtc.halt(false); rtc.writeProtect(false); // Setup Serial connection Serial.begin(9600); // The following lines can be commented out to use the values already stored in the DS1302 rtc.setTime(13, 30, 0); // Set the time to 12:00:00 (24hr format) } void loop() { if (Time > 13, 30, 20) digitalWrite(10, HIGH); // relais 1 On if (Time > 13, 30, 40) digitalWrite(10, LOW); // relais 1 Off } // Send time Serial.println(rtc.getTimeStr()); // Wait one second before repeating :) delay (1000); }
En de foutcode,
code:
1 2 3 4 5 6 7 8 sketch_aug30e.ino: In function 'void loop()': sketch_aug30e:35: error: expected primary-expression before '>' token sketch_aug30e:36: error: expected primary-expression before '>' token sketch_aug30e.ino: At global scope: sketch_aug30e:41: error: 'Serial' does not name a type sketch_aug30e:44: error: expected constructor, destructor, or type conversion before '(' token sketch_aug30e:45: error: expected declaration before '}' token expected primary-expression before '>' token
En die waardes waarmee je Time vergelijkt, moeten die niet in quotes?
1
2
3
4
5
6
| void loop() { if (Time > 13, 30, 20) digitalWrite(10, HIGH); // relais 1 On if (Time > 13, 30, 40) digitalWrite(10, LOW); // relais 1 Off } |
Hoe staat Time declared?
[ Voor 69% gewijzigd door LED-Maniak op 31-08-2015 20:35 ]
Mitsubishi externe temperatuur sensor (Home Assistant compatible): V&A - ClimaControl - Ook voor Panasonic & LG.
Tijd staat volgens mij als DS1302... durf ik niet zeker te zeggen.LED-Maniak schreef op maandag 31 augustus 2015 @ 20:33:
Waar heb je vandaan dat dit werk?
code:
1 2 3 4 5 6 void loop() { if (Time > 13, 30, 20) digitalWrite(10, HIGH); // relais 1 On if (Time > 13, 30, 40) digitalWrite(10, LOW); // relais 1 Off }
Hoe staat Time declared?
Ik had het even gegoogled hoe dat nou precies zat, en vond daar hem zo maar blijkbaar niet echt juist haha.
1
2
3
4
| RTC.getTime(); unsigned long hour = RTC.hour; unsigned int minute = RTC.minute; unsigned int second = RTC.second; |
Daarna kan je in die if statement vergelijken of het overeen komt.
Mitsubishi externe temperatuur sensor (Home Assistant compatible): V&A - ClimaControl - Ook voor Panasonic & LG.
1
2
3
4
5
6
7
8
9
10
| Get current data from the DS1302. Parameters: None Returns: Time - structure Usage: t = rtc.getTime(); // Read current time and date. |
En dat op deze manier ingevoegd, maar nog steeds niet goed volgens mij?
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
| #include <DS1302.h> #include <RTCTimer.h> // Init the DS1302 DS1302 rtc(7, 8, 9); void setup() { pinMode(10, OUTPUT);// Relais 1 Daglicht pinMode(11, OUTPUT);// Relais 2 Nachtlicht pinMode(12, OUTPUT);// Relais 3 Koeling pinMode(13, OUTPUT);// Relais 4 Ongebruikt t = rtc.getTime(); // Read current time and date. // Set the clock to run-mode, and disable the write protection rtc.halt(false); rtc.writeProtect(false); // Setup Serial connection Serial.begin(9600); // The following lines can be commented out to use the values already stored in the DS1302 rtc.setTime(13, 30, 0); // Set the time to 12:00:00 (24hr format) } void loop() { if (t = rtc.getTime) > (13, 30, 10)) digitalWrite(10, HIGH); // relais 1 On if (t = rtc.getTime) > (13, 30, 30)) digitalWrite(10, LOW); // relais 1 Off // Send time Serial.println(rtc.getTimeStr()); // Wait one second before repeating :) delay (1000); } |
1
| if (t = rtc.getTime) > (13, 30, 10)) digitalWrite(10, HIGH); // relais 1 On |
Mitsubishi externe temperatuur sensor (Home Assistant compatible): V&A - ClimaControl - Ook voor Panasonic & LG.
1
2
3
4
5
6
7
8
9
10
| sketch_aug30e.ino: In function 'void setup()': sketch_aug30e:17: error: 't' was not declared in this scope sketch_aug30e.ino: In function 'void loop()': sketch_aug30e:35: error: 't' was not declared in this scope sketch_aug30e:35: error: expected primary-expression before '>' token sketch_aug30e:35: error: expected ';' before ')' token sketch_aug30e:36: error: 't' was not declared in this scope sketch_aug30e:36: error: expected primary-expression before '>' token sketch_aug30e:36: error: expected ';' before ')' token 't' was not declared in this scope |
Inderdaad, hij lijkt t niet te herkennen.
(13,30,30) lijkt mij ook niet helemaal de manier om een timestamp te noteren. Misschien een constructortje aanroepen?LED-Maniak schreef op maandag 31 augustus 2015 @ 21:26:
Loopt hij niet nog steeds hier op vast?
code:
1 if (t = rtc.getTime) > (13, 30, 10)) digitalWrite(10, HIGH); // relais 1 On
| Mijn joystick / simpit project | Blog | Elite Dangerous CMDR Cataclysm72
Zou je kunnen helpen? Heb zitten googlen, maar wat en vooral hou moet ik het declaren?Pizza_Boom schreef op maandag 31 augustus 2015 @ 21:33:
Dat is op te lossen door t eerst te declareren.
Dat is wel de manier waarop ik de tijd moet doorgeven richting de RTC module dus ga er van uit dat die dat zo zou moeten begrijpen.RobV schreef op maandag 31 augustus 2015 @ 21:56:
[...]
(13,30,30) lijkt mij ook niet helemaal de manier om een timestamp te noteren. Misschien een constructortje aanroepen?
Nou draai ik al even mee in de programmeerwereld, dus als jij mij kan vertellen waar je die notatie gezien/gelezen/geleerd hebt krijg je van mij puntenTerminalNL schreef op dinsdag 01 september 2015 @ 07:12:
Dat is wel de manier waarop ik de tijd moet doorgeven richting de RTC module dus ga er van uit dat die dat zo zou moeten begrijpen.

'Vastlopen' is over het algemeen van toepassing wanneer een programma stopt door een fout in de code terwijl deze wordt uitgevoerd (run-time). Hier praten we over een syntax error omdat de fout dusdanig is dat de code niet eens in de Arduino geplaatst kan worden.
Om je een beetje op weg te helpen: je kunt geen tijd noteren met (13,30,10). Zo gaat dat niet werken. Je kunt wel een variabele aanmaken die een tijd bevat; even uit het hoofd:
1
| time_t vanmiddag = time_t(13, 30, 10); |
Let erop het aantal je haakjes ()' altijd overeenkomt lingt en rechts. Hier mis je al een '(' dus het gaat sowieso niet werken. Daarnaast is rtc.getTime een functie, dus moet hij als volgt worden aangeroepen
1
| t = rtc.getTime() |
Nu kun je wel doen:
1
2
3
4
| if(t > vanmiddag) { ... } |
Zo. Kun je weer even vooruit. Ik adviseer je echter om even een basismodule C te bekijken zodat je in elk geval de basisprincipes door hebt.
[ Voor 52% gewijzigd door RobV op 01-09-2015 08:26 ]
| Mijn joystick / simpit project | Blog | Elite Dangerous CMDR Cataclysm72
Je code weet niet wat voor variabele t is. Is het een integer, een character, of zou je je integer toch stiekem in een array moeten verpakken. Als ik zie hoe jij je code wilt schrijven, ben ik geneigd te zeggen dat je dit in een 1d array moet gaan zetten.TerminalNL schreef op dinsdag 01 september 2015 @ 07:12:
Zou je kunnen helpen? Heb zitten googlen, maar wat en vooral hou moet ik het declaren?
Welke DS1307 en RTCTimer libraries gebruik je?TerminalNL schreef op dinsdag 01 september 2015 @ 07:12:
[...]
Zou je kunnen helpen? Heb zitten googlen, maar wat en vooral hou moet ik het declaren?
[...]
Dat is wel de manier waarop ik de tijd moet doorgeven richting de RTC module dus ga er van uit dat die dat zo zou moeten begrijpen.
All electric components run on smoke. If you let the smoke out, they won't work anymore.
Enige wat ik gevonden heb, is de verwijzing naar het PRR0 register, waar ik bit PRTWI naar 0 moet schrijven. Er staan op 235 en 236 prachtige voorbeeldstukjes, maar die bieden niet wat ik nu zoek.
Iemand die me even een zetje in de goede richting kan geven?
[ Voor 6% gewijzigd door Pizza_Boom op 01-09-2015 16:55 ]
Gebruik een DS1302, staat verder geen type of merk verder op.SnowDude schreef op dinsdag 01 september 2015 @ 09:32:
[...]
Welke DS1307 en RTCTimer libraries gebruik je?
Dit is de library die ik erbij gebruik.
Bedankt allemaal voor de input, ik ga maar eens basis cursus C opzoeken inderdaad. Allemaal toch een stuk lastiger dan de basis van een Simatic PLC systeem

Een van de belangrijkste dingen die je moet leren is hoe je met variablen types en classes leert om te gaan. Ook moet je uit de library kunnen halen wat voor soort variabelen en objecten een method nodig heeft en wat hij terug geeft.TerminalNL schreef op dinsdag 01 september 2015 @ 18:57:
[...]
Gebruik een DS1302, staat verder geen type of merk verder op.
Dit is de library die ik erbij gebruik.
Bedankt allemaal voor de input, ik ga maar eens basis cursus C opzoeken inderdaad. Allemaal toch een stuk lastiger dan de basis van een Simatic PLC systeem.
Als je in de header file kijkt in je library (DS1302.h) dan zie je dat de method getTime() een object terug geeft van de class Time en het feit dat er niets tussen de haakjes staat betekent dat de method geen input verwerkt. Je ziet ook de method setTime en de term "void" geeft aan dat er niets terug wordt gegeven. Wel zie je dat deze method 3 unsigned integers van 8 bits (een klasieke byte met waarde van 0 tot en met 255) nodig heeft.
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
| public: DS1302(uint8_t ce_pin, uint8_t data_pin, uint8_t sclk_pin); Time getTime(); void setTime(uint8_t hour, uint8_t min, uint8_t sec); void setDate(uint8_t date, uint8_t mon, uint16_t year); void setDOW(uint8_t dow); char *getTimeStr(uint8_t format=FORMAT_LONG); char *getDateStr(uint8_t slformat=FORMAT_LONG, uint8_t eformat=FORMAT_LITTLEENDIAN, char divider='.'); char *getDOWStr(uint8_t format=FORMAT_LONG); char *getMonthStr(uint8_t format=FORMAT_LONG); void halt(bool value); void writeProtect(bool enable); void setTCR(uint8_t value); void writeBuffer(DS1302_RAM r); DS1302_RAM readBuffer(); void poke(uint8_t addr, uint8_t value); uint8_t peek(uint8_t addr); private: uint8_t _ce_pin; uint8_t _data_pin; uint8_t _sclk_pin; uint8_t _burstArray[8]; uint8_t _readByte(); void _writeByte(uint8_t value); uint8_t _readRegister(uint8_t reg); void _writeRegister(uint8_t reg, uint8_t value); void _burstRead(); uint8_t _decode(uint8_t value); uint8_t _decodeH(uint8_t value); uint8_t _decodeY(uint8_t value); uint8_t _encode(uint8_t vaule); }; |
De class Time staat ook in de zelfde header gedefinieerd en is in princiepe een verzameling unsigned integers van 8 en 16 bit:
1
2
3
4
5
6
7
8
9
10
11
12
13
| class Time { public: uint8_t hour; uint8_t min; uint8_t sec; uint8_t date; uint8_t mon; uint16_t year; uint8_t dow; Time(); }; |
Je zou naar deze library kunnen kijken: http://playground.arduino.cc/Main/DS1302RTC
Samen met de time library: http://playground.arduino.cc/Code/Time
Waarom gebruik je geen i2c library? Of gebruik je die als referentie: https://www.arduino.cc/en/Reference/WirePizza_Boom schreef op dinsdag 01 september 2015 @ 16:55:
Ik loop te stoeien met het opzetten van de I2C setup vanuit de Amtel 32U4 datasheet. Ik neem aan dat ik het e.e.a. moet instellen (o.a. welke kloksnelheid, modus van de master, 7 of 10 bits I2C adressering), maar ik kan dat in de datasheet niet vinden hoe ik dat doe.
Enige wat ik gevonden heb, is de verwijzing naar het PRR0 register, waar ik bit PRTWI naar 0 moet schrijven. Er staan op 235 en 236 prachtige voorbeeldstukjes, maar die bieden niet wat ik nu zoek.
Iemand die me even een zetje in de goede richting kan geven?
Maar in de data sheet moet je pag 252 hebben: TWI Bit Rate Register – TWBR en TWI Control Register – TWCR
10 bits addressen worden niet ondersteund door de ATmega, met wat trucken kan je wel een 8 bits adressbus gebruiken, maar dan wordt het read/write bit gebruikt als een extra adres bit.
[ Voor 16% gewijzigd door SnowDude op 01-09-2015 20:06 ]
All electric components run on smoke. If you let the smoke out, they won't work anymore.
Omdat ik die ontzettend omslachtig vind. Ik wil graag kunnen volgen wat er gebeurt, dat kan ik bij die library niet echt. Daarbij wil ik zowel m'n EEPROM als mijn RTC en eventueel ook nog een andere Micro op 1 bus hebben zitten, dus zou ik dan in theorie 3 library's moeten inladen. Beetje inefficiënt (okee, ik gebruik Arduino, mag over efficiëntie niet echt mopperen, maar toch).SnowDude schreef op dinsdag 01 september 2015 @ 19:53:
Waarom gebruik je geen i2c library? Of gebruik je die als referentie: https://www.arduino.cc/en/Reference/Wire
Top, ga ik eens bekijken.Maar in de data sheet moet je pag 252 hebben: TWI Bit Rate Register – TWBR en TWI Control Register – TWCR
Ik gebruik ze ook niet, maar ik dacht dat ik, net als bij de PIC, moest aangeven dat ik 7 bit adressen ging gebruiken.10 bits addressen worden niet ondersteund door de ATmega, met wat trucken kan je wel een 8 bits adressbus gebruiken, maar dan wordt het read/write bit gebruikt als een extra adres bit.
Er van uit gaande dat alle 3 de libraries netjes de Wire.h library gebruiken (die overigens in de Arduino Core zit) zul je denk ik niet voordeel hebben. Mijn advies zou dan ook zijn om gewoon de Arduino libs te pakken voor de i2c, zorgen dat het werkt, en dan kijken of je ergens performance/geheugen/functionaliteit te kort komt om zelf met registers te gaan hengelen. We zitten hier tenslotte in het Arduino topic en niet in het ruw-hardware-bit-bangen topicPizza_Boom schreef op dinsdag 01 september 2015 @ 21:29:
[...]
Omdat ik die ontzettend omslachtig vind. Ik wil graag kunnen volgen wat er gebeurt, dat kan ik bij die library niet echt. Daarbij wil ik zowel m'n EEPROM als mijn RTC en eventueel ook nog een andere Micro op 1 bus hebben zitten, dus zou ik dan in theorie 3 library's moeten inladen.
PS. Dat neemt overigens niet weg dat het rete-interessant is om te proberen het zelf voor elkaar te krijgen, zo heb ik ook een aantal libraries zelf geschreven. Libraries is hierbij een groot woord voor een .cpp-file die je in je /libraries folder hangt.
| Mijn joystick / simpit project | Blog | Elite Dangerous CMDR Cataclysm72
Dit is natuurlijk geen bitbangen hè. Als ik naar 10 bit adressen zou willen, dan moet ik gaan bitbangen. Of andere pootjes. Maar ik wil nogal veel van die processor (er draaien momenteel 1 timer interrupt, 3 pin change interrupts en ondertussen ook nog een counter), daarbij vind ik het veel toffer om het zelf uit te zoeken.RobV schreef op dinsdag 01 september 2015 @ 21:49:
[...]
Er van uit gaande dat alle 3 de libraries netjes de Wire.h library gebruiken (die overigens in de Arduino Core zit) zul je denk ik niet voordeel hebben. Mijn advies zou dan ook zijn om gewoon de Arduino libs te pakken voor de i2c, zorgen dat het werkt, en dan kijken of je ergens performance/geheugen/functionaliteit te kort komt om zelf met registers te gaan hengelen. We zitten hier tenslotte in het Arduino topic en niet in het ruw-hardware-bit-bangen topic
Nouja, de libraries, ik volg ze soms echt niet. Heb ik die datasheet erbij liggen en dan zit ik zo van: "Euh, tsja, dit en dit zou moeten gebeuren maar waar in de code ze dat nou precies doen?"PS. Dat neemt overigens niet weg dat het rete-interessant is om te proberen het zelf voor elkaar te krijgen, zo heb ik ook een aantal libraries zelf geschreven. Libraries is hierbij een groot woord voor een .cpp-file die je in je /libraries folder hangt.
Afijn, even de klokfrequentie bepalen. Ik wil op 100 kHz draaien. Correct me if I'm wrong.
dus 100.000 = (16.000.000)/(16+(2(x)*4^y)). Y is de prescaler (TWPS1 en TWPS0) en geeft keuze uit 1, 4, 16 en 64, geadviseerd wordt om x (TWBR) boven 10 te hebben als je device een master is. Onder de streep wil ik dus op 160 uitkomen om een klokfrequentie van 100 kHz te draaien. Betekent dus dat (2(x)*4^y) samen 144 moeten zijn.
Dat betekent dus dat de grootst mogelijke prescaler 4 is. 2^4 = 16. Dus 2(x) + 16 = 144 => 128 = 2(x), 64 = x.
Als instelling voor TWBR zou ik dus 0b01000000; moeten pakken, terwijl ik als instelling voor TWSR bit TWPS0 hoog moet gaan zetten.
[ Voor 0% gewijzigd door Pizza_Boom op 01-09-2015 22:37 . Reden: quote gefixt ]
Hier kan ik je even niet volgen? Al heb je 20 devices op je I2c bus zitten, dan nog hoef je de library maar 1 keer te laden.Pizza_Boom schreef op dinsdag 01 september 2015 @ 21:29:
[...]
Omdat ik die ontzettend omslachtig vind. Ik wil graag kunnen volgen wat er gebeurt, dat kan ik bij die library niet echt. Daarbij wil ik zowel m'n EEPROM als mijn RTC en eventueel ook nog een andere Micro op 1 bus hebben zitten, dus zou ik dan in theorie 3 library's moeten inladen. Beetje inefficiënt (okee, ik gebruik Arduino, mag over efficiëntie niet echt mopperen, maar toch).
[...]
All electric components run on smoke. If you let the smoke out, they won't work anymore.
De I2C lib hoef je inderdaad maar 1 x te laden. Maar als je alles met libs doet, moet je dus ook voor je EEPROM en je RTC een lib laden. En om je andere Arduino ook als master in te stellen, of juist als slave.SnowDude schreef op dinsdag 01 september 2015 @ 22:42:
[...]
Hier kan ik je even niet volgen? Al heb je 20 devices op je I2c bus zitten, dan nog hoef je de library maar 1 keer te laden.
Je hoeft daar natuurlijk geen lib voor te gebruiken als je de i2c lib gebruikt. Een EEPROM en RTC kan je nog steeds "handmatig" aanspreken met de i2c lib. Het is natuurlijk ook niet zo dat als je maar 1 functie van een lib gebruikt dat dan de hele lib gecompiled wordt. Methods die niet gebruikt worden worden niet gecompiled.Pizza_Boom schreef op dinsdag 01 september 2015 @ 22:44:
[...]
De I2C lib hoef je inderdaad maar 1 x te laden. Maar als je alles met libs doet, moet je dus ook voor je EEPROM en je RTC een lib laden. En om je andere Arduino ook als master in te stellen, of juist als slave.
Dit is de init code van de wire lib:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| void twi_init(void) { // initialize state twi_state = TWI_READY; twi_sendStop = true; // default value twi_inRepStart = false; // activate internal pullups for twi. digitalWrite(SDA, 1); digitalWrite(SCL, 1); // initialize twi prescaler and bit rate cbi(TWSR, TWPS0); cbi(TWSR, TWPS1); TWBR = ((F_CPU / TWI_FREQ) - 16) / 2; /* twi bit rate formula from atmega128 manual pg 204 SCL Frequency = CPU Clock Frequency / (16 + (2 * TWBR)) note: TWBR should be 10 or higher for master mode It is 72 for a 16mhz Wiring board with 100kHz TWI */ // enable twi module, acks, and twi interrupt TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA); } |
All electric components run on smoke. If you let the smoke out, they won't work anymore.
Als je van plan bent veel te gaan coden dan is een eigen lib/routine/functie schrijven maar weinig werk en weet je direct wat er allemaal gebeurt en waarom.
Dan is het meteen veel minder eng als je een keertje die perfecte chip wilt gebruiken maar er nog geen arduino ondersteunde lib van is en weet je ook sneller of bepaalde chips compatibel zijn met al bestaande libs.
Ieder zijn ding toch?
[ Voor 21% gewijzigd door LED-Maniak op 01-09-2015 23:28 ]
Mitsubishi externe temperatuur sensor (Home Assistant compatible): V&A - ClimaControl - Ook voor Panasonic & LG.
Kijk ik ben helemaal niet tegen het zelf schrijven van libs, mijn eigen lib folder is een stuk groter dan de standaard libs. Je kan er ontzettend veel van leren, en we blijven tweakers.LED-Maniak schreef op dinsdag 01 september 2015 @ 23:25:
Daarnaast moet je nog steeds voor alle libs weten wat ze precies doen en gebruiken om zeker te weten dat je geen vage fouten hebt omdat ze bepaalde peripherals dubbel gebruiken, zoals pizza_boom al ondervonden heeft.
Als je van plan bent veel te gaan coden dan is een eigen lib/routine/functie schrijven maar weinig werk en weet je direct wat er allemaal gebeurt en waarom.
Dan is het meteen veel minder eng als je een keertje die perfecte chip wilt gebruiken maar er nog geen arduino ondersteunde lib van is en weet je ook sneller of bepaalde chips compatibel zijn met al bestaande libs.
Ieder zijn ding toch?
Maar je kan ook te veel hooi op je vork nemen, en ik vind het helemaal niet erg om mensen te helpen, maar we verwachten op dit forum wel een beetje eigen inzicht en moeite. Als je hier met vragen komt die ik in 1 minuut in de data sheets vind en dan blijkbaar ook nog niet de moeite neemt om in de standaard avr libraries te duiken die gewoon in je Arduino folder staan (en geloof me die zijn over het algemeen beter geprogrammeerd dan dat de meeste hier zelf kunnen) dan vraag ik me of of je het niet te moeilijk maakt voor je zelf.
Heel veel mensen zijn bang dat ze een arduino te zwaar belasten, omdat ze denken dat die 16MHz veel te weinig is. Feit is dat hij ruim 16 keer zo snel draait als mijn oude C64 en bijna 4 keer zo snel als mijn eerste 8088 PC
De Arduino is een hardstikke mooi product en het is heel laagdrempelig om mee te werken, maar dat komt omdat er heel veel community libraries zijn. Ik werk zelf aan grote embedded linux systemen die die bij miljoenen mensen thuis staan, en ook daar zie je dat sommige ontwikkelaars het wiel elke keer opnieuw uitvinden, en elke keer weer de zelfde fouten maken.
All electric components run on smoke. If you let the smoke out, they won't work anymore.
Leuk, maar ik heb nog steeds geen flauw idee waar je die wire init vandaan heb getoverd. Als ik die lib open op mijn PC, dan krijg ik een onleesbaar kladblokbestandje waarin alles achter elkaar is gezet. Gelukkig herken ik zaken en komt het erop neer dat dit hetzelfde bestand is: https://github.com/Seeed-...mtk/libraries/Wire/Wire.hSnowDude schreef op woensdag 02 september 2015 @ 00:39:
Maar je kan ook te veel hooi op je vork nemen, en ik vind het helemaal niet erg om mensen te helpen, maar we verwachten op dit forum wel een beetje eigen inzicht en moeite. Als je hier met vragen komt die ik in 1 minuut in de data sheets vind en dan blijkbaar ook nog niet de moeite neemt om in de standaard avr libraries te duiken die gewoon in je Arduino folder staan (en geloof me die zijn over het algemeen beter geprogrammeerd dan dat de meeste hier zelf kunnen) dan vraag ik me of of je het niet te moeilijk maakt voor je zelf.
Hoofdstuk 20 uit de datasheet heb ik ook meermaals doorgenomen, ik heb diverse library's doorgespit en flink wat gegoogled, voordat ik besloot hier een vraag te droppen. Ik herken niet alle termen, omdat die weer Amtel specifiek zijn. Jij hebt blijkbaar veel meer ervaring met Amtel producten en weet direct naar welke termen je moet zoeken. Ik weet ongeveer wat ik zoek, maar niet in welke vorm ze het verpakt hebben. En dat maakt deze zoektocht soms best lastig.
Ik heb de afgelopen jaren voldoende frituurwerk gezien/gevoeld (er zwerft hier ergens nog een TO220 Tor rond die mijn vingerafdruk in zijn heatsink gebrand heeft staan. En ook een breadboard naar de eeuwige jachtvelden heeft gestuurd. Daarbij gaat het mij nog niet eens zoveel om het wel of niet overbelasten van de chip, maar gewoon het feit dat het netjes en efficiënt draait. En dat zijn libraries in mijn ogen absoluut niet.Heel veel mensen zijn bang dat ze een arduino te zwaar belasten, omdat ze denken dat die 16MHz veel te weinig is. Feit is dat hij ruim 16 keer zo snel draait als mijn oude C64 en bijna 4 keer zo snel als mijn eerste 8088 PC
Zo mooi en zo laagdrempelig dat het zooitje al meermaals gebrickt is geweest... Die zooi werkt leuk op de 328's e.d., maar niet voldoende op de 32U4. Als er zich iets als onbetrouwbare partner heeft getoond, dan zijn het library's wel. De helft werkt niet en de andere helft doet niet wat jij wilt.De Arduino is een hardstikke mooi product en het is heel laagdrempelig om mee te werken, maar dat komt omdat er heel veel community libraries zijn.
Ik heb een smalle basis aan C met uC's die ik zelf probeer te verbreden. Het afgelopen jaar is dat onder andere gelukt door een voor mij compleet nieuwe PIC chip in gebruik te nemen en daaruit diverse protocollen te krijgen (PWM, I2C Master en slave), maar ook door Arduino te gaan gebruiken. Echter blijf ik ook tegen dingen aan lopen die ik gewoon niet weet. En waar een ander gewoon klakkeloos een stuk code over neemt en probeert of deze werkt, wil ik graag weten hoe het werkt en waarom en waarom het niet, in mijn ogen, efficiënter wordt uitgevoerd. Termen die voor iemand die er volledig onderricht in heeft gehad compleet vanzelfsprekend zijn en geen enkele uitleg behoeven, zijn dat voor mij niet en roepen vragen op. En die vragen stel ik, als ik het antwoord daarop niet zelf kan vinden. Net als stappen die ik neem of dingen die ik doe, dat gooi ik hier ook neer.
Als dat niet de bedoeling is, hoor ik dat ook graag. Weet ik in ieder geval waar ik aan toe ben.
Het is heel simpel, als je een example sketch opent dan zie je dat die wire.h gebruikt. Vervolgens open je je arduino folder en doet een search naar die file naam. Je moet nooit notepad gebruiken voor dit soort files. Je kan beter een echte editor gebruiken als notepad++. Die heeft ook opmaak ingebouwd voor C en C++ Ook kan je in alle bestanden in een folder zoeken naar een specifieke tekst.Pizza_Boom schreef op woensdag 02 september 2015 @ 02:37:
[...]
Leuk, maar ik heb nog steeds geen flauw idee waar je die wire init vandaan heb getoverd. Als ik die lib open op mijn PC, dan krijg ik een onleesbaar kladblokbestandje waarin alles achter elkaar is gezet. Gelukkig herken ik zaken en komt het erop neer dat dit hetzelfde bestand is: https://github.com/Seeed-...mtk/libraries/Wire/Wire.h
Zoek eens op Atmel in plaats van Amtel, dat kan wat helpenHoofdstuk 20 uit de datasheet heb ik ook meermaals doorgenomen, ik heb diverse library's doorgespit en flink wat gegoogled, voordat ik besloot hier een vraag te droppen. Ik herken niet alle termen, omdat die weer Amtel specifiek zijn. Jij hebt blijkbaar veel meer ervaring met Amtel producten en weet direct naar welke termen je moet zoeken. Ik weet ongeveer wat ik zoek, maar niet in welke vorm ze het verpakt hebben. En dat maakt deze zoektocht soms best lastig.
Hier maak je alleen een cruciale denk fout. Ten eerste zijn libraries juist ontworpen om efficient met geheugen om te gaan en de code overzichtelijk te maken. Ten tweede zijn veel native libraries een stuk efficienter geschreven dan jij kan.[...]
Ik heb de afgelopen jaren voldoende frituurwerk gezien/gevoeld (er zwerft hier ergens nog een TO220 Tor rond die mijn vingerafdruk in zijn heatsink gebrand heeft staan. En ook een breadboard naar de eeuwige jachtvelden heeft gestuurd. Daarbij gaat het mij nog niet eens zoveel om het wel of niet overbelasten van de chip, maar gewoon het feit dat het netjes en efficiënt draait. En dat zijn libraries in mijn ogen absoluut niet.
Volgens mij gaat het bij jou vooral fout omdat je een fout maakt in je interrupts. Interrupt afhandeling is een van de aller moeilijkste dingen om te doen, omdat je via een te trage interrupt routine in een continue loop komt.[...]
Zo mooi en zo laagdrempelig dat het zooitje al meermaals gebrickt is geweest... Die zooi werkt leuk op de 328's e.d., maar niet voldoende op de 32U4. Als er zich iets als onbetrouwbare partner heeft getoond, dan zijn het library's wel. De helft werkt niet en de andere helft doet niet wat jij wilt.
Dat is helemaal niet erg maar doe het stap voor stap, en hou er rekening mee dat sommige dingen voor jou efficienter lijken maar voor een compiler omslachtiger zijn en vise versaIk heb een smalle basis aan C met uC's die ik zelf probeer te verbreden. Het afgelopen jaar is dat onder andere gelukt door een voor mij compleet nieuwe PIC chip in gebruik te nemen en daaruit diverse protocollen te krijgen (PWM, I2C Master en slave), maar ook door Arduino te gaan gebruiken. Echter blijf ik ook tegen dingen aan lopen die ik gewoon niet weet. En waar een ander gewoon klakkeloos een stuk code over neemt en probeert of deze werkt, wil ik graag weten hoe het werkt en waarom en waarom het niet, in mijn ogen, efficiënter wordt uitgevoerd. Termen die voor iemand die er volledig onderricht in heeft gehad compleet vanzelfsprekend zijn en geen enkele uitleg behoeven, zijn dat voor mij niet en roepen vragen op. En die vragen stel ik, als ik het antwoord daarop niet zelf kan vinden. Net als stappen die ik neem of dingen die ik doe, dat gooi ik hier ook neer.
Als dat niet de bedoeling is, hoor ik dat ook graag. Weet ik in ieder geval waar ik aan toe ben.
All electric components run on smoke. If you let the smoke out, they won't work anymore.
Het probleem dat ik tegenkom is dat ik op mijn mifare 1kb pas, alleen data kan schrijven op sector 1, en de andere sectoren niet (wat naar mijn kijk niet het geval zou moeten zijn volgens de datasheet: http://www.nxp.com/documents/data_sheet/MF1S503x.pdf paragraaf 8.6 t/m 8.7), de melding die ik hierbij krijg is: MIFARE_Write() failed: A MIFARE PICC responded with NAK.
De sectoren zien er als volgt uit:
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
| Sector Block 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 AccessBits 15 63 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF [ 0 0 1 ] 62 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 14 59 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF [ 0 0 1 ] 58 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 57 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 56 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 13 55 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF [ 0 0 1 ] 54 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 53 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 52 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 12 51 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF [ 0 0 1 ] 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 49 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 48 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 11 47 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF [ 0 0 1 ] 46 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 45 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 44 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 10 43 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF [ 0 0 1 ] 42 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 9 39 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF [ 0 0 1 ] 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 37 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 36 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 8 35 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF [ 0 0 1 ] 34 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 33 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 32 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 7 31 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF [ 0 0 1 ] 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 29 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 6 27 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF [ 0 0 1 ] 26 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 25 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 24 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 5 23 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF [ 0 0 1 ] 22 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 21 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 4 19 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF [ 0 0 1 ] 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 17 FF FF FF FF FF FF 19 67 8E 00 FF FF FF FF FF FF [ 0 0 0 ] 16 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 3 15 00 00 00 00 00 00 19 67 8E 00 00 00 00 00 00 00 [ 0 1 1 ] 14 F6 FF FF FF 09 00 00 00 F6 FF FF FF 0E F1 0E F1 [ 1 1 0 ] Value=0xFFFFFFF6 Adr=0xE 13 01 00 00 00 FE FF FF FF 01 00 00 00 0D F2 0D F2 [ 1 1 0 ] Value=0x1 Adr=0xD 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 2 11 00 00 00 00 00 00 19 67 8E 00 00 00 00 00 00 00 [ 0 1 1 ] 10 F6 FF FF FF 09 00 00 00 F6 FF FF FF 0A F5 0A F5 [ 1 1 0 ] Value=0xFFFFFFF6 Adr=0xA 9 01 00 00 00 FE FF FF FF 01 00 00 00 09 F6 09 F6 [ 1 1 0 ] Value=0x1 Adr=0x9 8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] 1 7 00 00 00 00 00 00 19 67 8E 00 00 00 00 00 00 00 [ 0 1 1 ] 6 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 1 1 0 ] Value=0x0 Adr=0x0 5 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 1 1 0 ] Value=0x0 Adr=0x0 4 01 02 03 04 05 06 07 08 08 09 FF 0B 0C 0D 0E 0F [ 0 0 0 ] 0 3 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF [ 0 0 1 ] 2 20 20 20 20 20 20 20 20 20 20 20 20 20 20 01 00 [ 0 0 0 ] 1 54 61 78 20 20 20 20 20 20 20 20 20 20 20 20 20 [ 0 0 0 ] 0 B3 CD 5F 00 21 88 04 00 85 00 B4 2E F0 BB 6A A8 [ 0 0 0 ] |
Heeft iemand ervaring met het programmeren van mifare RFID pasjes? Ik ben al meerdere dagen bezig om het werkend te krijgen, en het wilt maar niet lukken...
Dat is in het algemeen waar, maar bij Arduino vraag ik het mij af.SnowDude schreef op woensdag 02 september 2015 @ 09:30:
[...]
Hier maak je alleen een cruciale denk fout. Ten eerste zijn libraries juist ontworpen om efficient met geheugen om te gaan en de code overzichtelijk te maken. Ten tweede zijn veel native libraries een stuk efficienter geschreven dan jij kan.
Die libs zijn zo opgebouwd om vooral eenvoudig en (zo goed als mogelijk..) fool proof te zijn. Niet voor efficiëntie.
Voorbeelden uit de Atmel datasheet en voorbeeldlibs die daar vandaan komen zijn al een stuk beter.
Pizza_boom wilde volgens mij pinnen gebruiken die al elders in een lib werden aangestuurd waardoor het voor hem niet werkte.
Het is toch echt net wat je zoekt.
Mitsubishi externe temperatuur sensor (Home Assistant compatible): V&A - ClimaControl - Ook voor Panasonic & LG.