Forum: Analoge Elektronik und Schaltungstechnik Appnote avr446 Atmega2560 (Arduino)


von mr.T (Gast)


Lesenswert?

Nabend in die Runde,
ich habe heute mal versucht das Programm aus der AppNote um zu 
schreiben, damit es auf meinem Arduino Mega2560 läuft.

Erstmal liefert AVR Studio 6 einen Fehler bei den Berechnungen von A_SQ

integer constant is too large for 'long' type
1
#define T1_FREQ 2000000L
2
#define FSPR 200
3
#define SPR 200
4
#define ALPHA (long)(2*3.14159/SPR)                    // 2*pi/spr
5
#define A_T_x100 ((long)(ALPHA*T1_FREQ*100))     // (ALPHA / T1_FREQ)*100
6
#define T1_FREQ_148 ((long)((T1_FREQ*0.676)/100)) // divided by 100 and scaled by 0.676
7
#define A_SQ  (long)(ALPHA*2*10000000000)         // ALPHA*2*10000000000
8
#define A_x20000 (long)(ALPHA*20000)              // ALPHA*20000

das habe ich dann ausgelagert und in Excel von Hand berechnet und 
eingetragen.
1
#define A_T_x100 6283180
2
#define T1_FREQ_148 13520
3
#define A_SQ 628318000
4
#define A_x20000 628

Dann lief es aber immer noch nicht, ich habe wohl noch ein Problem mit 
dem Timer1
1
void speed_cntr_Init_Timer1(void)
2
{
3
  // Tells what part of speed ramp we are in.
4
  srd.run_state = STOP;
5
  // Timer/Counter 1 in mode 4 CTC (Not running).
6
  TCCR1B = (1<<WGM13); //Original WGM12
7
  // Timer/Counter 1 Output Compare A Match Interrupt enable.
8
  TIMSK1 = (1<<OCIE1A);
9
10
11
}

TCCR1B = (1<<WGM13);
habe ich geändert, eigentlich ist dort für CTC, WGM12, auch laut 
Datenblatt, wenn ich nicht irre, aber dann Läuft das viel zu schnell. 
Mit WGM13 kann ich meinen Schrittmotor nun verfahren.

mit den Werten verfahre ich zur Zeit
speed_cntr_Move(200,30000,30000,12000);

Aber irgend wie ist das doch so nicht richtig :(

#pragma vector=TIMER1_COMPA_vect
__interrupt void speed_cntr_TIMER1_COMPA_interrupt( void )

wurde ersetzt zu

ISR ( TIMER1_COMPA_vect )

http://atmel.no/webdoc/atmel.docs/atmel.docs.33085.19870.html
http://www.atmel.com/images/doc2549.pdf

grüße

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.