Hallo Ich mache gerade eine Diplomarbeit und habe paar Probleme mit dem Xmega. Kurz zur Information: Programmiere mit C und habe den XMega128a3. PWM: Ich bekomme am Oszi ein Signal. Nur ist es so, dass ich Per und CCA einstelle, aber es kommt immer ein ähnliches Teil raus und zwar sieht man immer ein Rechtecksignal, was zu 50/50 besteht, also 50% ein und 50% aus. Wenn ich PER auf 0 setzte seh ich es noch immer, und wenn ich CCA verstelle, dann wird es halt länger und kürzer. Hier mal der Code. void TimersInit() //Config von Timer der x/y-Achse { //PORTE.0 PWM TCE0.PER = 10000; // Impulsdauer TCE0.CCA = 100; TCE0.CTRLB = 0x00010011; // enable CCA TCE0.CTRLA = TC_CLKSEL_DIV64_gc; } Und beim Timer ist es so, dass ich gar nichts bekomme. Vll habe ich ja einen Fehler im Programm. void TimersInit() //Config von Timer der x/y-Achse { // Set up Timer/Counter 0. //PORTC.2 TCC0.PERBUF = 0x0000; // Impulsdauer TCC0.CTRLB = 0x01000000; // enable CCC TCC0.CTRLA = 0x00000101; // 64 Prescaler -->2y Sekunden TCC0.CNT=0x00; } ISR(TCC0_OVF_vect) //Timer -->Was passiert, wenn der Timer von 0 beginnt { PORTC.OUTSET = PIN2_bm; _delay_us(2); PORTC.OUTCLR = PIN2_bm; ISTSchritte++; } und zu guter letzt ein Frage. Dieser Controller ist so aufgebaut, dass auf der Platine intern ein Grafikcontroller verbunden ist und ein Touch-Display. Wenn ich dem Controller nun einen Code schicke, bekomme ich retour die Touchcoordinaten. 2-mal x-bytes und 2-mal y-bytes. Kann man das nun so aufbauen, die abfrage? void Touch() { unsigned char x_pos, y_pos, x_pos1, x_pos2, y_pos1, y_pos2; unsigned char to[2] = {0x6F, 0x05}; for (int x = 0; x < 2; x++) { USARTD0.DATA = to[x]; _delay_ms(3); } while(!(USARTD0.STATUS & USART_RXCIF_bm)); x_pos1=USARTD0.DATA; while(!(USARTD0.STATUS & USART_RXCIF_bm)); x_pos2=USARTD0.DATA; while(!(USARTD0.STATUS & USART_RXCIF_bm)); y_pos1=USARTD0.DATA; while(!(USARTD0.STATUS & USART_RXCIF_bm)); y_pos2=USARTD0.DATA; x_pos=(x_pos1*256+x_pos2); y_pos=(y_pos1*256+y_pos2); return (x_pos,y_pos); } Am Anfang sende ich halt die Daten zum Grafikcontroller und dann bekomme ich das Retour. Kann man die DAten so abspeichern und weiterverarbeiten? LG Wolfi
Hallo, hier mal ein funktionierendes Programm mit Timer und PWM. Gruß G.G.
Danke Gerhard Gehlert. Hat funktioniert, jetzt rennt es : D Nur die Frage zum USART ist noch offen. Funktioniert das so, wie ich das geschrieben habe?
Hallo, > x_pos=(x_pos1*256+x_pos2); > y_pos=(y_pos1*256+y_pos2); Da "x_pos" und "y_pos" als "unsigned char" deklariert sind, wird da nur der Wert von "x_pos2" bzw. "y_pos2" drinstehen. Als "int" oder "unsigned int" deklariert ist das Ergebnis sinnvoller.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.