Forum: Mikrocontroller und Digitale Elektronik PIC18F45K22 blinkender PORTD


von Da Mo (Gast)


Lesenswert?

Ich verwende den Timer0 (PIC18F45K22) um die 8 LED's am PORTD blinken zu 
lassen.

Im nächsten Schritt, wollte ich in der if-Verzweigung einen counter 
platzieren, welcher bis 5 zählt.

Je nach Zählstufe, wollte ich in der while-Schleife weitere 
if-Verzweigungen einbauen und LED's am PORTC leuchten lassen (Zählstufe 
1 --> LED 1, ...). Leider funktioniert das nicht. Es gibt nur ein kurzes 
aufleuchten der LED 0(Bit0).

Was kann der Grund dafür sein?
1
// Ich lerne den Timer0 zu verstehen
2
void main(void)
3
{
4
 int counter=0;
5
 
6
 ANSELD=0x00;
7
 TRISD=0x00;
8
 LATD=0x00;
9
10
 // Konfiguration Timer0
11
 T0CON.TMR0ON=1;
12
 T0CON.T08BIT=0;
13
 T0CON.T0CS=0;
14
 T0CON.T0PS0=0;
15
 T0CON.T0PS1=0;
16
 T0CON.T0PS2=0;
17
 T0CON.PSA=0;
18
19
 // blinkender PORTD
20
 while(1)
21
 {
22
  if(INTCON.TMR0IF==1)
23
  {
24
   LATD=~LATD;
25
   INTCON.TMR0IF=0;
26
  }
27
 }
28
}

Vielen DANK!

von Markus F. (affe55)


Lesenswert?

Hi,

ist das dein komplettes Programm? Es fehlt nämlich das Interrupt Vector 
Mapping (High Level, Low Level Interrupt) sowie die Abhandlung der 
Interrupt Service Routine (ISR). Ich gehe mal stillschweigend davon aus 
das du
a) MPLAB benutzt und
b) c18 Compiler installiert hast.
Schau einfach mal im Manual des c18 Compilers und im Ordner des 
Compilers auf deiner Festplatte, da müsste sogar ein Beispiel vorhanden 
sein. Welchen Programmer nutzt du?

Gruß

von Da Mo (Gast)


Lesenswert?

Das ist mein ganzes Programm. Sind diese Einstellungen hier schon 
notwendig (Es gibt in meinem Programm nämlich noch keine Interrupts)? 
Der "blinkende PORTD" mit Hilfe des Timer0 funktioniert einwandfrei.

Ich verwende MikroC PRO von MikroElektronika:

http://www.mikroe.com/eng/products/view/7/mikroc-pro-for-pic

Ich habe keine Ahnung wie ich weiter vorgehen soll!?

Trotzdem DANKE!

von Der Rächer der Transistormorde (Gast)


Lesenswert?

Do Ma schrieb:
> Ich habe keine Ahnung wie ich weiter vorgehen soll!?

Für den Anfang:

- Pic Typ testen
- Fusebits checken

- Programm kommentieren das nicht jeder die die Registerbits einzeln 
nachschlagen muss

Port D als Zähler inkrementieren (wirkt oft wunder wenn das ganze zu 
schnell läuft)

Markus Fab. schrieb:
> Es fehlt nämlich das Interrupt Vector Mapping

Er pollt, da braucht es keinen Vector.

von Da Mo (Gast)


Lesenswert?

Port D als Zähler inkrementieren?

von Vincent H. (vinci)


Lesenswert?

Takt?
Watchdog?
sämtlichen anderen Funktionen an PORTD deaktiviert?

1x kurzes Aufleuchten der LED0 oder bleibt Sie eingeschalten?

von Da Mo (Gast)


Lesenswert?

Takt? --> PIC-Takt -> /4 -> /256
Watchdog? --> deaktiviert
sämtlichen anderen Funktionen an PORTD deaktiviert? --> ja

1x kurzes Aufleuchten der LED0 oder bleibt Sie eingeschalten? --> bleibt 
an

von Kein Name (Gast)


Lesenswert?

Interrupt-Flag pollen???

Der Mann ist genial! Auf diese Idee ist bisher noch niemand gekommen.

Bloß nicht erklären, wie wir Langweiler die Sache anpacken. Ich will 
mehr von diesen undenkbaren Inspirationen sehen.

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.