Moin zusammen, ich habe ein Programm für den Arduino micro geschrieben aber jetzt ist mir aufgefallen, dass der Micro einfach zu wenig Speicherplatz hat. Deshalb wollte ich jetzt auf den Mega umsteigen. Irgendwie scheint aber ein einfaches auswählen des Mega Boards nicht zu reichen. Muss ich die Timer noch anpassen oder liegt es an was anderem?
1 | void setup(){ |
2 | pinMode(5,OUTPUT); |
3 | pinMode(6,OUTPUT); |
4 | pinMode(A0,INPUT); |
5 | |
6 | // Timer1 instalisieren |
7 | TCCR1A = 0; //Register definiert zurücksetzten |
8 | TCCR1B = 0; //zuerst Register definiert zurücksetzen |
9 | TCNT1 = 0; //Zählerwert zurücksetzten |
10 | |
11 | OCR1A = 199; //Timer1 80kHZ einstellen |
12 | TCCR1B |= (1 << WGM12); //CTC mode |
13 | //TCCR1B |= (0 << CS12) | (0 << CS11) | (1 >> CS10); //kein Prescale |
14 | TCCR1B |= (1 << CS10); // clk/1 prescale 1024 |
15 | TIMSK1 |= (1 << OCIE1A); //Aktivieren des Timer-Vergleichs-Interrupt |
16 | } |
17 | |
18 | ISR(TIMER1_COMPA_vect){ //Interrupt |
19 | |
20 | //Signalvergleich |
21 | if (D[n] < val*S[m]) { //Dreiecksignal kleiner als Sinussignal |
22 | bitSet(PORTC, 6); //Pin 5 HIGH |
23 | } |
24 | else { //Dreiecksignal größer als Sinussignal |
25 | bitClear(PORTC, 6); //Pin 5 LOW |
26 | } |
27 | if (D[n] < val*S[m]) { //Dreiecksignal kleiner als Sinussignal |
28 | bitSet(PORTD, 7); //Pin 6 HIGH |
29 | } |
30 | else { //Dreiecksignal größer als Sinussignal |
31 | bitClear(PORTD, 7); //Pin 6 LOW |
32 | } |
33 | |
34 | //Sinusarray hochrechnen |
35 | m=m+1; |
36 | if(m>1599) |
37 | m=0; |
38 | |
39 | //Dreieckarray hochrechnen |
40 | n=n+1; |
41 | if(n>15) |
42 | //if(n>7) //10kHz |
43 | n=0; |
44 | } |
45 | |
46 | void loop() { |
47 | p = analogRead(A0); //Potiwert |
48 | plot = map(p, 0, +500, 1, 5); //Amplituden der Sinussignal bestimmen |
49 | //map(value, fromLow, fromHigh, to Low, toHigh) |
50 | // |
51 | //delay(300); |
52 | val=plot; //val ist der Wert vom Poti mit dem gerechnet wird |
53 | } |