Forum: Compiler & IDEs Probleme mit RC-Oscilator


von Michael (Gast)


Lesenswert?

Hi,

bin MSP Neueinsteiger. Habe vorher nur mit Atmel programmiert und war
volllll zufrieden. Aber der Strom und die Spannung .....

nun, habe mir bei reichelt ein MSP430FET bestellt mit MPS-430PM64 und 2
Controllern F149.
Wollte diese nun mal mit einer LED zum blinken bekommen, aber .....
geht nicht. Habe den internen RC-Oszilator eingeschalten, aber ....

Habe leider keine Ahnung was ich verkehrt gemacht haben könnte. Externe
Spannung keine, aber brauch ich ja auch nicht!?!

Kann mir jemand helfen? oder einen Tipp geben?

gruß micha

von m@is (Gast)


Lesenswert?

poste mal was du gemacht hast ;-)

hast du dir schon die examples angeschaut?

Gruß m@is

von Michael (Gast)


Lesenswert?

hi,

ne leider hab ich dies nicht gemacht. Werd ich aber.
Hier mal mein Quellcode!

//Target 149 device
#include <msp430x14x.h>
#include <msp430def.h>

unsigned char Timer;

void clock_init()
{
  //DCO=0x07
 DCOCTL=0xE0;//DCO.2,DCO.1,DCO.0
 BCSCTL2=0x00;
 BCSCTL1=0x80;//XT2OFF
}

void port_init()
{
 P1OUT=0x00;
 P1DIR=0x01;  //Pin 1 ist auf Ausgang der rest ist Eingang
 P1IES=0x00;
 P1IE=0x00;
 P1SEL=0x00;
 //alle anderen Ports sind auch Initialisiert, hier aber weg gelassen
}

void timera_init()
//Clock source=ACLK
//Divider=4
//TIMACLK=8,192KHz
//Frequency=99,9Hz ( 10,01mS)
{
 TACTL=0x00; //stop timer
 //channel0
 TACCTL0=0x4110;//TACCM0.0,TACAP0,TACCIE0
 TACCR0=0x52;
 TAR=0x0000;//clear timer counter
 TACTL=0x196;//TASSEL.0,TAID.1,TAMC.0,1,TAIE
}

//call this routine to initialise all peripherals
void init_devices(void)
{
 //stop errant interrupts until set up
 DINT(); //disable all interrupts
 ME1=0X00; //disable sfr peripherals
 ME2=0X00;
 IE1=0x00; //disable sfr interrupts
 IE2=0x00;
 //watchdog initialisation including nmi function
 WDTCTL=0x5A00 | 0x80;//HOLD
 //initialise other peripherals
 clock_init();
 port_init();
 timera_init();

 ME1=0x00;
 ME2=0x00;
 IE1=0x00;
 IE2=0x00;
 EINT(); //re-enable interrupts
}

//interrupt handlers

#pragma interrupt_handler timera_0_isr:TIMERA0_VECTOR
void timera_0_isr(void)
{
  Timer++;
}

//main code entry point
void main(void)
{
 init_devices();
 //insert your functional code here...
 Timer = 0x00;
 while(1)
 {
   if(Timer = 0x64)  //alle 100ms wechsel des Ports
   {
     Timer = 0x00;
   P1OUT |= 0x01;
   }
 }
}

das wars nun, ist eigentlich nicht weiter kompliziert.
mit dem builder alles erstellen lassen, deshalb sind die Komentare
so.
eigentlich wollte ich nur PORT1 benutzen. Pin0 und Pin1.
->Pin1 ist Ausgang der Rest Eingang   (Pin1 = Anode, Pin0 = Katode)
->der Pin1 soll immer zwischen High und Low schalten. um zu sehen
ob ich schon was bewegt habe. Halt der erste Schritt an einem neuen
Controller.
Hab leider nur ein Multimeter zum Messen meiner Schantaten. -> ne
Spannung messe ich nicht und blinken tut auch nichts.


gruß micha

von m@is (Gast)


Angehängte Dateien:

Lesenswert?

Du schaltest P1.0 alle 100ms ein, wo setzt Du ihn wieder zurück?

Warum legst Du den zweiten Anschluß Deiner LED auf einen Port und
schaltest ihn nicht gegen Masse?

Hab Dir noch das Beispiel LED's von gcc gezippt.

Gruß m@is

von Michael (Gast)


Lesenswert?

Danke,

hab mein Problem gefunden. Habe einen Denkfehler drin gehabt. Wollte
das er automatisch läuft, aber das funzt nicht.
Mit dem NoIce Debugger geht die ganze sache, da er ja die Spannung
darüber bekommt usw.
Habe auch die LED auf der Platine genutzt, d.h. die am PortPin 1.0


gruß micha

von Fritz Ganter (Gast)


Lesenswert?

Bei

if(Timer = 0x64)

soll wohl ein == statt = stehen.

von Michael (Gast)


Lesenswert?

je genau, sorry.

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.