Forum: Mikrocontroller und Digitale Elektronik PIC24 Digital I/O Problem (Pin lesen/schreiben)


von ... (Gast)


Lesenswert?

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

von holger (Gast)


Lesenswert?

>  TRISA = ~((1 << 2) || (1 << 3));
  TRISA = ~((1 << 2) | (1 << 3));

Kannste weglassen:  asm volatile ("NOP");

>  LATA = (1 << 2) || (1 << 3);
  LATA = (1 << 2) | (1 << 3);

von ... (Gast)


Lesenswert?

Oh verdammt! Das ist wohl der blödeste Fehler der mir je passiert ist! 
Ich glaube ich brauche eine Pause.

Danke für deine Hilfe

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.