Ich bastel grad mit einem PIC24FJ64GA002. Ich hab es geschafft, über den
ADC Werte einzulesen, mit PWM etwas auszugeben und einen Timer-Interrupt
im 1ms Takt laufen zu lassen. Das einfachste, nämlich einen Pin auf
output zu schalten und 0V oder 3V auszugeben macht Probleme. Ich hab im
Datenblatt gelesen, das die Pins, die zum ADC gehören, nach dem Reset
standardmäßig auf analog in gesetzt sind. Aber die Pins, die ich
verwenden will (z.B. RA2, RA3, RB7, RB8) gehören nicht zum ADC. Ich habe
auch schon per conig word das JTAG Interface abgeschaltet. So langsam
habe ich keine Idee mehr, warum das nicht funktioniert. Folgendes habe
ich gemacht:
1 | int main(void)
|
2 | {
|
3 | // Oszillator Taktteiler konfigurieren:
|
4 | CLKDIV = CLKDIV_2; // CPU = 16MHz, Timer = 8MHz
|
5 |
|
6 | // Ausgabepins für die PWM konfigurieren
|
7 | OUT_PIN_PWM1 = FUNCTION_PWM1;
|
8 | OUT_PIN_PWM2 = FUNCTION_PWM2;
|
9 | OUT_PIN_PWM3 = FUNCTION_PWM3;
|
10 | OUT_PIN_PWM4 = FUNCTION_PWM3;
|
11 |
|
12 | // I/O Pins konfigurieren
|
13 | TRISA = ~((1 << 2) || (1 << 3));
|
14 | asm volatile ("NOP");
|
15 | LATA = (1 << 2) || (1 << 3);
|
16 |
|
17 | // ADC konfigurieren
|
18 | init_adc();
|
19 |
|
20 | // PWM initialisieren
|
21 | init_pwm();
|
22 |
|
23 | // Timer initialisieren
|
24 | init_timer();
|
25 |
|
26 | while (1)
|
27 | {
|
28 | asm volatile ("NOP");
|
29 | }
|
30 |
|
31 | return 0;
|
32 | }
|
Hat jemand vielleicht eine Idee, was ich außer TRISA und LATA setzen
(bzw. für später: PORTA einlesen) noch machen muss?
PS: es gab hier im Forum schonmal einen Beitrag mit dem gleichen
Problem, nur leider ist da keine Lösung beschrieben