Acties:
  • 0 Henk 'm!

  • LED-Maniak
  • Registratie: Oktober 2003
  • Laatst online: 10:18
Sterker nog, je kan i2c niet naar andere pinnen verplaatsen tenzij je gaat bitbangen.

Pizza_Boom heeft het probleem dat hij veel wilt aansluiten en dus andere dingen naar andere pinnen moet verplaatsen.

Mitsubishi externe temperatuur sensor (Home Assistant compatible): V&A - ClimaControl - Ook voor Panasonic & LG.


Acties:
  • 0 Henk 'm!

  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
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. :X
:>
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.
LED-Maniak schreef op maandag 24 augustus 2015 @ 09:54:
Sterker nog, je kan i2c niet naar andere pinnen verplaatsen tenzij je gaat bitbangen.
Is bekend 8)
Pizza_Boom heeft het probleem dat hij veel wilt aansluiten en dus andere dingen naar andere pinnen moet verplaatsen.
Is dat een probleem of gewoon een uitdaging? :)

Afijn, ik ga eens kijken hoe ik die gemorste tin netjes weg krijg met mijn apparatuur.

Acties:
  • 0 Henk 'm!

  • LED-Maniak
  • Registratie: Oktober 2003
  • Laatst online: 10:18
Het is nu wel duidelijk waarom die bordjes zo goedkoop zijn. De hele QA en electrical tests worden overgeslagen :P

Mitsubishi externe temperatuur sensor (Home Assistant compatible): V&A - ClimaControl - Ook voor Panasonic & LG.


Acties:
  • 0 Henk 'm!

  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
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... :P
Afbeeldingslocatie: http://i.imgur.com/hxm92VQl.jpg
Alle poortjes zijn weer los en doen het nog gewoon. Nu dus niet meer aanzitten. :)

Acties:
  • 0 Henk 'm!

  • SnowDude
  • Registratie: Januari 2002
  • Laatst online: 13-09 18:52
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... :P
[afbeelding]
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?

All electric components run on smoke. If you let the smoke out, they won't work anymore.


Acties:
  • 0 Henk 'm!

  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
Dit was het bordje dat de code voor de ISP draaide. De genuine Arduino was gebrickt.

Acties:
  • 0 Henk 'm!

  • SnowDude
  • Registratie: Januari 2002
  • Laatst online: 13-09 18:52
Dat is dus de reden dat de software niet werkte

All electric components run on smoke. If you let the smoke out, they won't work anymore.


Acties:
  • 0 Henk 'm!

  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
Durf ik niet te zeggen, deze pinnen heb je niet nodig daarbij (dit zijn de I2C pinnen, het schrijven van de bordjes gaat met SPI. Enige wat ik kan bedenken dat het nog zou kunnen zijn geweest is het feit dat ik het direct op de header pakte en niet op de ICSP, maar die pinnen zijn in principe 1:1 doorgekoppeld met de SPI pinnen op de normale header.

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.

Acties:
  • 0 Henk 'm!

  • RobV
  • Registratie: Juni 2013
  • Niet online

RobV

Welcome to the grid, Program.

(overleden)
Op de led moet een weerstand zitten. ervoor of erna. Als er dus wel een ledje zit en geen andere weerstand, dan moet daar een weerstand, en zeker geen 0ohm. Dus of ze zijn het vergeten, of je mag zelf kiezen. Overigens sloop ik de led er meestal vanaf, rete irritant en vaak veel te fel

 | Mijn joystick / simpit project | Blog | Elite Dangerous CMDR Cataclysm72


Acties:
  • 0 Henk 'm!

  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
Er staat on bij, dus dit kan je zelf kiezen denk ik. Hij zit op de onderkant, heb er momenteel geen last van. Maarja, om op die andere nou eentje erop te gaan zetten is ook niet nodig.

Acties:
  • 0 Henk 'm!

  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
Voordat ik hem straks weer brick, kan iemand kijken of dit zo klopt? In de 32U4 datasheet heb ik de informatie op pagina 91 gebruikt voor pin change interrupt. Ik twijfel zelf over de ISR vector, of die wel de juiste naam heeft.

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
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.

Acties:
  • 0 Henk 'm!

  • SnowDude
  • Registratie: Januari 2002
  • Laatst online: 13-09 18:52
Volegns mij is het pcint0_vect

All electric components run on smoke. If you let the smoke out, they won't work anymore.


Acties:
  • 0 Henk 'm!

  • LED-Maniak
  • Registratie: Oktober 2003
  • Laatst online: 10:18
Indeed:
PCINT0
Pin Change Interrupt Request 0
Vergeet je ook je timer interrupt niet?

Mitsubishi externe temperatuur sensor (Home Assistant compatible): V&A - ClimaControl - Ook voor Panasonic & LG.


Acties:
  • 0 Henk 'm!

  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
LED-Maniak schreef op maandag 24 augustus 2015 @ 21:47:
Vergeet je ook je timer interrupt niet?
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.
Dus toch. Ik kwam hierop omdat bij 11.1.5 staat:
The corresponding interrupt of Pin Change Interrupt Request is executed from the PCI0 Interrupt Vector.

Acties:
  • 0 Henk 'm!

  • SnowDude
  • Registratie: Januari 2002
  • Laatst online: 13-09 18:52
In Arduino\hardware\tools\avr\avr\include\avr staan de files met defines voor de atmega's.
Voor de micro is dat als het goed is de file iom32u4,h daar staat het volgende:

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
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.


Acties:
  • 0 Henk 'm!

  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
Thanks! Wist nog helemaal niet dat je het zo ver kan terugvinden binnen de Arduino. Eigelijk wel logisch.

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:
C:
1
2
3
volatile int teller = 100;
volatile int LOOPDIRECTION = 1;
volatile int KNOBSTATE = 0;


Interrupt:
C:
1
2
3
4
ISR(PCINTO_vect)
{
  KNOBSTATUS();
}  


KNOBSTATUS:
C:
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:
C:
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 ]


Acties:
  • +1 Henk 'm!

  • mcDavid
  • Registratie: April 2008
  • Laatst online: 11:38
Waarom is je loopdirection niet gewoon +1 of -1? Hoef je in je loop alleen maar teller += loopdirection te doen.

En waarom gebruik je upper case voor variabelen? Geeft verwarring.

[ Voor 23% gewijzigd door mcDavid op 25-08-2015 10:51 ]


Acties:
  • 0 Henk 'm!

  • RobV
  • Registratie: Juni 2013
  • Niet online

RobV

Welcome to the grid, Program.

(overleden)
mijn systeem:
- 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


Acties:
  • 0 Henk 'm!

  • SnowDude
  • Registratie: Januari 2002
  • Laatst online: 13-09 18:52
Mijn lokale variabelen beginnen altijd met een underscore met uitzondering van loopcounters i en j

All electric components run on smoke. If you let the smoke out, they won't work anymore.


Acties:
  • 0 Henk 'm!

  • RobV
  • Registratie: Juni 2013
  • Niet online

RobV

Welcome to the grid, Program.

(overleden)
SnowDude schreef op dinsdag 25 augustus 2015 @ 13:48:
Mijn lokale variabelen beginnen altijd met een underscore met uitzondering van loopcounters i en j
Dat deed ik vroeger bij private class variabelen, maar nooit bij locals.

 | Mijn joystick / simpit project | Blog | Elite Dangerous CMDR Cataclysm72


Acties:
  • 0 Henk 'm!

  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
Ik heb er niet echt een systeem in zitten, als het maar werkt. Moet ik eigenlijk wel aanleren, net als 1 taal voor de variabelen (ik mix tussen Engels en Nederlands). Ach ja.
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.
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.

Acties:
  • 0 Henk 'm!

  • mcDavid
  • Registratie: April 2008
  • Laatst online: 11:38
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.

[ Voor 9% gewijzigd door mcDavid op 25-08-2015 15:20 ]


Acties:
  • 0 Henk 'm!

  • LED-Maniak
  • Registratie: Oktober 2003
  • Laatst online: 10:18
^= is gewoon correct.

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.


Acties:
  • 0 Henk 'm!

  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
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.
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.

Zit gewoon clean aangesloten. Knop aan de plus en een 10k pull down aan de Arduino kant. Zo dus:
Afbeeldingslocatie: https://developer.mbed.org/media/uploads/4180_1/xpulldown.png.pagespeed.ic.AOXMefaT_J.png
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 ;) ).
Volgens mij wel. Ik heb hem KNOB genoemd middels een const int en vervolgens met pinmode naar input gezet: pinMode(KNOB, INPUT);

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. :P

[ Voor 7% gewijzigd door Pizza_Boom op 25-08-2015 16:17 ]


Acties:
  • 0 Henk 'm!

  • SnowDude
  • Registratie: Januari 2002
  • Laatst online: 13-09 18:52
Waarom gebruik je niet de interne pull-up weerstand en schakel je niet naar de ground? Dat is namelijk de meest gangbare manier van het aansluiten van een schakelaar.

All electric components run on smoke. If you let the smoke out, they won't work anymore.


Acties:
  • 0 Henk 'm!

  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
Omdat, voor zover ik weet, de apparatuur die ik later interrupts wil laten geven, een hoog signaal geven als ze een interrupt maken.
edit:
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. :P Lekker makkelijk dus.

[ Voor 39% gewijzigd door Pizza_Boom op 25-08-2015 17:06 ]


Acties:
  • +1 Henk 'm!

  • SnowDude
  • Registratie: Januari 2002
  • Laatst online: 13-09 18:52
FYI:

pinMode(pin, INPUT_PULLUP);

All electric components run on smoke. If you let the smoke out, they won't work anymore.


Acties:
  • 0 Henk 'm!

  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
Thanks! Even omgedraad en erin gezet, maar het resetprobleem bestaat nog steeds. Werkt het trouwens ook met pulldown? Of kent de Arduino dat niet?

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.
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
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 ]


Acties:
  • +1 Henk 'm!

  • RobV
  • Registratie: Juni 2013
  • Niet online

RobV

Welcome to the grid, Program.

(overleden)
code:
1
LOOPDIRECTION ^= 0x01;


deden wij altijd met een boolean. Dan snap je tenminste wat er staat.
code:
1
LOOPDIRECTION = !LOOPDIRECTION;


Verder is het handig om ook de naam van de variabele zo te nemen dat je ook snapt wat 'ie doet:

code:
1
2
3
4
5
6
isCountingUp = !isCountingUp;

if(isCountingUp)
{
   ...etc
}


Maarja, wie ben ik

 | Mijn joystick / simpit project | Blog | Elite Dangerous CMDR Cataclysm72


Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 20-09 19:58

Sebazzz

3dp

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.

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Acties:
  • 0 Henk 'm!

  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
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.
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.
Reageer je op mij of op een vorige pagina? Ik kan je reactie niet helemaal plaatsen.

[ Voor 5% gewijzigd door Pizza_Boom op 25-08-2015 21:59 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Pizza_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.
kan je niet beter een apart topic voor dit project openen ? heb je alles bij elkaar en wordt eea overzichtelijker .. tis maar een idee 8)

Acties:
  • 0 Henk 'm!

  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
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 8)
Krijg ik dan geen MODje over me heen die zegt dat dit in het centrale Arduinotopic thuis hoort?

Acties:
  • 0 Henk 'm!

Verwijderd

Pizza_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?
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 kwijt :P

Acties:
  • 0 Henk 'm!

  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
Een concreet omschreven einddoel is er ook niet. Ik ga door zo lang ik het leuk vind en ik heb een aantal ideeën, maar als ik het zat ben kan ik er ook mee nokken. Vooralsnog wil ik een klok en een temperatuursensor uitlezen. Kan dus best zijn dat, als ik het leuk blijf vinden, ik dit door ga linken naar een Raspberry en weet ik veel wat allemaal, maar ook dat als ik het zat ben, ik het daarbij laat en een nieuw project bedenk. Hoofddoel voor mij is tijdverdrijf en wat leren. :)

[ Voor 49% gewijzigd door Pizza_Boom op 25-08-2015 22:23 ]


Acties:
  • 0 Henk 'm!

  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
Hmm, even wat getest. Opstelling nagenoeg hetzelfde gehouden, LED toegevoegd die op de interrupt geschakeld zou moeten worden. Schakelt niet, hele IC wordt herstart. Comment ik de PCINT0 ISR en de 2 PCI instellingen en gooi ik de knop terug naar de oude toestand waarin ik deze min of meer aan het pollen was, dan werkt het wel gewoon. Het is dus echt binnen de interrupt dat er iets dwars ligt.

Acties:
  • 0 Henk 'm!

  • RobV
  • Registratie: Juni 2013
  • Niet online

RobV

Welcome to the grid, Program.

(overleden)
Je hebt wel weerstandjes aan he led segmenten hangen toch?

 | Mijn joystick / simpit project | Blog | Elite Dangerous CMDR Cataclysm72


Acties:
  • +1 Henk 'm!

  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
Check. 220 ohm per segmentje.

Acties:
  • 0 Henk 'm!

  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
Hmmm... Wat aan het googlen, kom ik op een blogpost die verwijst naar een Amtel ISR document. Tijdens het scannen van de eerste regels valt mijn oog hierop.
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.
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...

  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
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.

  • BladeSlayer1000
  • Registratie: April 2013
  • Laatst online: 17-09 20:36
Vandaag een Arduino Mega 2560 binnen gekregen besteld bij de arduino website.

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);
Afbeeldingslocatie: http://i60.tinypic.com/2dh7iw7.png

Er zat een kortsluiting tussen de D+ en D- 8)7

[ Voor 13% gewijzigd door BladeSlayer1000 op 27-08-2015 15:00 ]


  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
Handig geregeld weer dus.

  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
En we zijn weer unbricked. Nu nog eens uitzoeken waarom mijn pin change interrupt het niet doet.

  • RobV
  • Registratie: Juni 2013
  • Niet online

RobV

Welcome to the grid, Program.

(overleden)
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.
Top.. Ik vraag me toch echt af hoe het je lukt om de chip gebrickt te krijgen.

 | Mijn joystick / simpit project | Blog | Elite Dangerous CMDR Cataclysm72


  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
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.
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. 8)7

Acties:
  • 0 Henk 'm!

  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
Okee, ik snap er officieel geen donder meer van. 8)7 Interrupt op de pin werkt nu feilloos, terwijl er aan de code zelf geen donder is veranderd (ik heb de break die erin zat door de while die aangeroepen werd door de interrupt eruit gegooid, dat hield de andere interrupt tegen). Wellicht dat er toch nog iets fout heeft gezeten intern na de vorige bootloader burning.

[ Voor 5% gewijzigd door Pizza_Boom op 28-08-2015 00:28 ]


Acties:
  • 0 Henk 'm!

  • BladeSlayer1000
  • Registratie: April 2013
  • Laatst online: 17-09 20:36
Vreemd verhaal, heb van alles gedaan met chips en nog nooit een gebrickt gekregen.

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 |:(

Acties:
  • 0 Henk 'm!

  • SnowDude
  • Registratie: Januari 2002
  • Laatst online: 13-09 18:52
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.
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.

All electric components run on smoke. If you let the smoke out, they won't work anymore.


Acties:
  • +2 Henk 'm!

  • RobV
  • Registratie: Juni 2013
  • Niet online

RobV

Welcome to the grid, Program.

(overleden)
Pizza_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
Ik snap er geen reet van

 | Mijn joystick / simpit project | Blog | Elite Dangerous CMDR Cataclysm72


Acties:
  • 0 Henk 'm!

  • BoAC
  • Registratie: Februari 2003
  • Laatst online: 20-09 23:24

BoAC

Memento mori

Hier nog iemand.. waar zit die while dan :?
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 :)

Acties:
  • 0 Henk 'm!

  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
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.
MEGA32U4. Had ook niets anders verwacht van een genuine Arduino boardje.
RobV schreef op vrijdag 28 augustus 2015 @ 12:34:
[...]

Ik snap er geen reet van
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.

Acties:
  • 0 Henk 'm!

  • RobV
  • Registratie: Juni 2013
  • Niet online

RobV

Welcome to the grid, Program.

(overleden)
Tja een wachtlus in een interrupt is natuurlijk vragen om moeilijkheden.

 | Mijn joystick / simpit project | Blog | Elite Dangerous CMDR Cataclysm72


Acties:
  • 0 Henk 'm!

  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
Nouja, an sich, moeilijkheden leverde het niet op. Alleen een break in het programma die er niet hoorde, dus die kon wieberen.

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. :F |:(
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. :)

Acties:
  • +1 Henk 'm!

  • BoAC
  • Registratie: Februari 2003
  • Laatst online: 20-09 23:24

BoAC

Memento mori

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.

[ Voor 23% gewijzigd door BoAC op 28-08-2015 13:33 ]


Acties:
  • 0 Henk 'm!

  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
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.
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).

Acties:
  • +2 Henk 'm!

  • RobV
  • Registratie: Juni 2013
  • Niet online

RobV

Welcome to the grid, Program.

(overleden)
Nee, je had hem niet gezien, want de USB core op een ATMega32U4 wordt door een atmega zelf afgehandeld. Als jij de interrupts blockt door dus een eindeloze loop (een while die nooit eindigt) tijdens je interrupt zal de USB-code nooit uitgevoerd kunnen worden om de capabilities te delen met je usb host. In het kort: de usb client code krijgt geen kans.

Onderstaande code eindigt nooit.
code:
1
2
3
while(true)
{
}


De 'nutteloze break' waar jij het over had is de nooduitgang.

code:
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


Acties:
  • 0 Henk 'm!

  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
Dat is er ook uit. ;) Mijn timer interrupt wisselt van segment van het display en de pin change interrupt wisselt de telrichting.
Ik moet mijn woorden echt eens zorgvuldiger kiezen. :X Die break sloeg op het programma dat dan stil staat, niet op de break van de loop.

Blijft voor mij dus alleen de vraag waarom het opeens is ontstaan zonder het veranderen van code of überhaupt het uploaden van code.

Acties:
  • 0 Henk 'm!

  • LED-Maniak
  • Registratie: Oktober 2003
  • Laatst online: 10:18
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).
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).

Mitsubishi externe temperatuur sensor (Home Assistant compatible): V&A - ClimaControl - Ook voor Panasonic & LG.


Acties:
  • 0 Henk 'm!

  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
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).
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.

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 ]


Acties:
  • 0 Henk 'm!

  • LED-Maniak
  • Registratie: Oktober 2003
  • Laatst online: 10:18
Oh, dus die code zit niet eens afgeschermd in de ruimte voor de bootloader? Dat is wel erg (understatement) crap.

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.


Acties:
  • 0 Henk 'm!

  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
Durf ik niet te zeggen. Bij het zoeken naar interrupts en mogelijkheden om de RX/TX pinnen anders te gebruiken, kwam ik e.e.a. aan problemen tegen van mensen met hun serial dat niet lekker werkt. Deze blijkt er dus twee te hebben, serial en serial1. En ik zeg het net nog verkeerd ook, de USB zit op serial en wil je de RX/TX pinnen gebruiken, dan moet je serial1 gebruiken. En doordat die dus gescheiden zijn, levert het bij de Leonardo en Micro (als ik mij niet vergis de unieke) mogelijkheid op om je serialpinnen voor een ander intensief programma te gebruiken.

Acties:
  • 0 Henk 'm!

  • trekker22
  • Registratie: Maart 2003
  • Laatst online: 19-09 14:01
Vanmiddag eindelijk eens met mijn 1e arduino experimenteren.

Over tijdje is mijn 1e project een ledstrip als nachtlampje die onder bed wordt geplakt en aansturing middels bewegingssensor en donker-sensor!

Acties:
  • 0 Henk 'm!

  • BladeSlayer1000
  • Registratie: April 2013
  • Laatst online: 17-09 20:36
Heb al de hele middag ruzie met de RFID-RC522 module en de volgende library: https://github.com/miguelbalboa/rfid.
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..

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
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 ]


Acties:
  • 0 Henk 'm!

  • MuddyMagical
  • Registratie: Januari 2001
  • Laatst online: 09:13
Ik zit te stoeien met een tutorial van een paar jaar oud om een IR Duino laser tag te maken. Gaat mijn om het onder de knie krijgen en dan zelf verder werken eraan.

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.

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
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. :?

Acties:
  • 0 Henk 'm!

  • RobV
  • Registratie: Juni 2013
  • Niet online

RobV

Welcome to the grid, Program.

(overleden)
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.

 | Mijn joystick / simpit project | Blog | Elite Dangerous CMDR Cataclysm72


Acties:
  • 0 Henk 'm!

  • MuddyMagical
  • Registratie: Januari 2001
  • Laatst online: 09:13
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.
Snap ik, maar wil ook geen lappen code posten met 'euh, ik snap het niet.' :)

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.
C:
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.

Acties:
  • 0 Henk 'm!

  • TerminalNL
  • Registratie: Februari 2006
  • Laatst online: 09:27
Misschien dat jullie kunnen helpen, ik ben sinds kort begonnen met een aquarium op te starten en toen bedacht ik waarom allemaal dure tijdschakelaars gebruiken die onhandig werken als het ook allemaal via de computer geregeld zou kunnen worden.

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?

Acties:
  • 0 Henk 'm!

  • LED-Maniak
  • Registratie: Oktober 2003
  • Laatst online: 10:18
Je kan een relais schakelen en je krijgt de RTC tijd binnen.. Wat is dan de moeilijke stap om in de software een if(tijd == 12) relay=on; te maken?

Mitsubishi externe temperatuur sensor (Home Assistant compatible): V&A - ClimaControl - Ook voor Panasonic & LG.


Acties:
  • 0 Henk 'm!

  • TerminalNL
  • Registratie: Februari 2006
  • Laatst online: 09:27
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

Acties:
  • 0 Henk 'm!

  • MuddyMagical
  • Registratie: Januari 2001
  • Laatst online: 09:13
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
Sowieso staan je laatste Serial en die delay buiten je loop. Die laatste } sluit niets af.

En die waardes waarmee je Time vergelijkt, moeten die niet in quotes?

Acties:
  • 0 Henk 'm!

  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
Waar declareer je Time? En ik vraag mij af of je hem wel op deze manier mag uitvragen in een if statement.

Acties:
  • +1 Henk 'm!

  • LED-Maniak
  • Registratie: Oktober 2003
  • Laatst online: 10:18
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?

[ 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.


Acties:
  • 0 Henk 'm!

  • TerminalNL
  • Registratie: Februari 2006
  • Laatst online: 09:27
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?
Tijd staat volgens mij als DS1302... durf ik niet zeker te zeggen.
Ik had het even gegoogled hoe dat nou precies zat, en vond daar hem zo maar blijkbaar niet echt juist haha.

Acties:
  • 0 Henk 'm!

  • LED-Maniak
  • Registratie: Oktober 2003
  • Laatst online: 10:18
Met snel googlen kom ik dit tegen:

code:
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.


Acties:
  • 0 Henk 'm!

  • TerminalNL
  • Registratie: Februari 2006
  • Laatst online: 09:27
Heb even de library erbij gezocht van de DS1302, en kwam het volgende tegen.
code:
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?

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
#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);
  }

Acties:
  • 0 Henk 'm!

  • LED-Maniak
  • Registratie: Oktober 2003
  • Laatst online: 10:18
Loopt hij niet nog steeds hier op vast?

code:
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.


Acties:
  • 0 Henk 'm!

  • TerminalNL
  • Registratie: Februari 2006
  • Laatst online: 09:27
code:
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.

Acties:
  • 0 Henk 'm!

  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
Dat is op te lossen door t eerst te declareren.

Acties:
  • 0 Henk 'm!

  • RobV
  • Registratie: Juni 2013
  • Niet online

RobV

Welcome to the grid, Program.

(overleden)
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
(13,30,30) lijkt mij ook niet helemaal de manier om een timestamp te noteren. Misschien een constructortje aanroepen?

 | Mijn joystick / simpit project | Blog | Elite Dangerous CMDR Cataclysm72


Acties:
  • 0 Henk 'm!

  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
Wat heeft de voorkeur? Net als mijn timer en pin change interrupt ook mijn I2C (ohnee, TWI noemt Amtel het) direct uit de sheets pakken en zelf dus bouwen of hiervoor wel gewoon een library gebruiken?

Acties:
  • 0 Henk 'm!

  • TerminalNL
  • Registratie: Februari 2006
  • Laatst online: 09:27
Pizza_Boom schreef op maandag 31 augustus 2015 @ 21:33:
Dat is op te lossen door t eerst te declareren.
Zou je kunnen helpen? Heb zitten googlen, maar wat en vooral hou moet ik het declaren?
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?
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.

Acties:
  • 0 Henk 'm!

  • RobV
  • Registratie: Juni 2013
  • Niet online

RobV

Welcome to the grid, Program.

(overleden)
TerminalNL 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.
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 punten O-) Het is in elk geval geen C of C++.

'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:

code:
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
code:
1
t = rtc.getTime()


Nu kun je wel doen:
code:
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


Acties:
  • 0 Henk 'm!

  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
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?
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.

Acties:
  • 0 Henk 'm!

  • SnowDude
  • Registratie: Januari 2002
  • Laatst online: 13-09 18:52
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.
Welke DS1307 en RTCTimer libraries gebruik je?

All electric components run on smoke. If you let the smoke out, they won't work anymore.


Acties:
  • 0 Henk 'm!

  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
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?

[ Voor 6% gewijzigd door Pizza_Boom op 01-09-2015 16:55 ]


Acties:
  • 0 Henk 'm!

  • TerminalNL
  • Registratie: Februari 2006
  • Laatst online: 09:27
SnowDude schreef op dinsdag 01 september 2015 @ 09:32:
[...]

Welke DS1307 en RTCTimer libraries gebruik je?
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 O-) .

Acties:
  • +1 Henk 'm!

  • SnowDude
  • Registratie: Januari 2002
  • Laatst online: 13-09 18:52
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 O-) .
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.

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.

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
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:

C++:
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
Pizza_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?
Waarom gebruik je geen i2c library? Of gebruik je die als referentie: https://www.arduino.cc/en/Reference/Wire

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.


Acties:
  • 0 Henk 'm!

  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
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
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).
Maar in de data sheet moet je pag 252 hebben: TWI Bit Rate Register – TWBR en TWI Control Register – TWCR
Top, ga ik eens bekijken.
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.
Ik gebruik ze ook niet, maar ik dacht dat ik, net als bij de PIC, moest aangeven dat ik 7 bit adressen ging gebruiken.

Acties:
  • 0 Henk 'm!

  • RobV
  • Registratie: Juni 2013
  • Niet online

RobV

Welcome to the grid, Program.

(overleden)
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.
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 :D

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


Acties:
  • 0 Henk 'm!

  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
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 :D
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.
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.
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?" :+

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 ]


Acties:
  • 0 Henk 'm!

  • SnowDude
  • Registratie: Januari 2002
  • Laatst online: 13-09 18:52
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).

[...]
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.

All electric components run on smoke. If you let the smoke out, they won't work anymore.


Acties:
  • 0 Henk 'm!

  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
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.
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.

Acties:
  • 0 Henk 'm!

  • SnowDude
  • Registratie: Januari 2002
  • Laatst online: 13-09 18:52
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.
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.


Dit is de init code van de wire lib:

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
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.


Acties:
  • 0 Henk 'm!

  • LED-Maniak
  • Registratie: Oktober 2003
  • Laatst online: 10:18
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? :)

[ 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.


Acties:
  • 0 Henk 'm!

  • SnowDude
  • Registratie: Januari 2002
  • Laatst online: 13-09 18:52
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? :)
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.

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.


Acties:
  • 0 Henk 'm!

  • Pizza_Boom
  • Registratie: Juli 2012
  • Laatst online: 23:56
SnowDude 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.
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

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.
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
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.
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.
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.

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.

Acties:
  • 0 Henk 'm!

  • SnowDude
  • Registratie: Januari 2002
  • Laatst online: 13-09 18:52
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
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.
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.
Zoek eens op Atmel in plaats van Amtel, dat kan wat helpen ;) Maar ik snap het wel, en soms vergeet ik wel eens dat ik al 25 jaar hobby programmeer ervaring heb. Maar C is ook voor mij relatief nieuw, tot ik met arduino's begon te spelen had ik dat nog nooit gebruikt.
[...]
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.
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.
[...]
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.
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.
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.
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 versa :) Als je en lib gebruikt en daar maar twee regels code van gebruikt dan worden alleen die 2 regels code gecompiled en niet je hele lib. Jij bent gewoon tegen libraries in het algemeen en daar maak je het je zelf een stuk lastiger mee. Libraries zijn zo'n beetje de basis van C, het maakt je code meer onafhankelijk van de hardware. Er is denk ook bijna niemand hier die zijn serial output hard in stelt, maar gewoon de library functie Serial.Begin(baudrate) gebruikt.

All electric components run on smoke. If you let the smoke out, they won't work anymore.


Acties:
  • 0 Henk 'm!

  • BladeSlayer1000
  • Registratie: April 2013
  • Laatst online: 17-09 20:36
Ik ben al enkele dagen aan het stoeien met mijn RFID reader, type RC522. Voor communicatie met de RFID reader gebruik ik de volgende library: https://github.com/miguelbalboa/rfid

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:
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
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...

Acties:
  • 0 Henk 'm!

  • JustFogMaxi
  • Registratie: September 2014
  • Laatst online: 19-07 16:05

JustFogMaxi

zzzZzZZzZ

Geen ervaring met RFID maar klinkt een beetje als probleem dat Julian had, zie YouTube: First Look: RC522 RFID Reader/Writer ($4 on eBay)

Acties:
  • 0 Henk 'm!

  • LED-Maniak
  • Registratie: Oktober 2003
  • Laatst online: 10:18
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.
Dat is in het algemeen waar, maar bij Arduino vraag ik het mij af.
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.

Pagina: 1 ... 77 ... 96 Laatste