www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Msp430F5438 DC77 Signal


Autor: Ausländer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend
also, ich bin Neuling in Bereich Micorcontroller .
mein Problem ist: Ich will das Signal vom DCF77 sichtbar machen indem 
ein Led leuchtet wenn das Signal vorhanden ist. Leider passiert nichts. 
Kann mir jemand sagen was ich falsch mache danke
//7.4 sin  7.6 vcc 


#include "msp430x54x.h"

void main(void)
{
 PAOUT  = 0;
  PADIR  = 0xFFFF;  
  PASEL  = 0;
  PBOUT  = 0;  
  PBDIR  = 0xFFFF;
  PBSEL  = 0;
  PCOUT  = 0;    
  PCDIR  = 0xFFFF;
  PCSEL  = 0;  
  PDOUT  = 0;  
  PDDIR  = 0xFFFF;
  PDSEL  = 0;  
  PEOUT  = 0;  
  PEDIR  = 0xFEFF;                                                          
  PESEL  = 0;  
  P11OUT = 0;
  P11DIR = 0xFF;
  PJOUT  = 0;    
  PJDIR  = 0xFF;
  P11SEL = 0;
  
    
  
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  TA1CCTL0 = CCIE;                          // CCR0 Interrupt Aktivieren
  TA1CCR0 = 125;
  TA1CTL = TASSEL_1 + MC_1 + TACLR; 
  
  
  P1DIR |= 0x01;                           //  LED1
  P1DIR |= 0x02;                           // LED e 
  P7DIR |= BIT6;                           // DCF77 VCC
  P7IN  |= BIT4;
  
  
  
   P7OUT =BIT6;                            // DCF77 VCC--->1
  
  
 

  __bis_SR_register(LPM3_bits + GIE);       // LPM3 Modus + Interrupts Aktivieren 
 
}



#pragma vector=TIMER1_A0_VECTOR
__interrupt void TIMER1_A0_ISR(void)
{
 
  P1OUT ^= 0x01;                            // LED1 Blincken
  if((P7IN&BIT4))
   {
   P1OUT ^=0x02;                        // LED2 Blincken wenn DCF77 Signal( port 7.6) vohanden ist 
   }  

}

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ausländer schrieb:
>   PAOUT  = 0;
>   PADIR  = 0xFFFF;
>   PASEL  = 0;
>  ....
>   PJDIR  = 0xFF;
>   P11SEL = 0;

Was soll das?


Die Initialisierung von P7 solltest Du Dir nochmal genauer ansehen.

Ausländer schrieb:
>   P7DIR |= BIT6;                           // DCF77 VCC

Mit Deiner etwas willkürlichen Initialisierung am Anfang

>  PDDIR  = 0xFFFF;

hast Du alle Bits in P7DIR bereits auf 1 gesetzt, damit ist jedes 
der Bits ein Eingang.

PDDIR nämlich sind P7DIR und P8DIR zu einem 16-Bit-Register 
zusammengefasst.

>   P7IN  |= BIT4;

Was bringt es, P7IN zu beschreiben? Das ist ein read-only Register.

Autor: Ausländer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dankeschön für Deine Antwort

Rufus t. Firefly schrieb:
> Mit Deiner etwas willkürlichen Initialisierung am Anfang
>
>  PDDIR  = 0xFFFF;
>
> hast Du alle Bits in P7DIR bereits auf 1 gesetzt, damit ist jedes
>
> der Bits ein Eingang.

Kann man dies nicht überschreiben?


Die Initialisierung :
PAOUT = 0;
PADIR = 0xFFFF;
PASEL = 0;
PBOUT = 0;
PBDIR = 0xFFFF
...
wenn ich die weglasse dann habe ich nur 1.4V statt 3v (im output) .


Ich habe es jetzt so gemacht aber es ist genau wie vorher Led1 blinkt 
aber Led2 nicht
//7.4 sin  7.6 vcc 


#include "msp430x54x.h"

void main(void)
{
 
  
    
  
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  TA1CCTL0 = CCIE;                          // CCR0 Interrupt Aktivieren
  TA1CCR0 = 125;
  TA1CTL = TASSEL_1 + MC_1 + TACLR; 
  
  
  P1DIR |= 0x01;                           //  LED1
  P1DIR |= 0x02;                           // LED e 
  P7DIR |= BIT6;                           // DCF77 VCC
 
  
  
  
   P7OUT =BIT6;                            // DCF77 VCC--->1
  
  
 

  __bis_SR_register(LPM3_bits + GIE);       // LPM3 Modus + Interrupts Aktivieren 
 
}



#pragma vector=TIMER1_A0_VECTOR
__interrupt void TIMER1_A0_ISR(void)
{
 
  P1OUT ^= 0x01;                            // LED1 Blincken
  if((P7IN&BIT4))
   {
   P1OUT ^=0x02;                        // LED2 Blincken wenn DCF77 Signal( port 7.4) vohanden ist 
   }  

}

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ausländer schrieb:
> Rufus t. Firefly schrieb:
>> Mit Deiner etwas willkürlichen Initialisierung am Anfang
>>
>>  PDDIR  = 0xFFFF;
>>
>> hast Du alle Bits in P7DIR bereits auf 1 gesetzt, damit ist jedes
>> der Bits ein Eingang.
>
> Kann man dies nicht überschreiben?

Ja, natürlich kann man das. Aber genau das tust Du nicht, Du setzt nur 
das sowieso schon gesetzte Bit 6 nochmal, löschst aber keines der 
anderen:

>  P7DIR |= BIT6;                           // DCF77 VCC

Sinnvoller wäre hier

   P7DIR = BIT6;                           // DCF77 VCC

Autor: Ausländer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
irgendwie läuft alles anderes, wie ich es haben will. Ich habe das dcf77 
abgeklemmt --> led2 blinkt
habe das Ganze in Debug-Watch(ccs4)
Port_7_8_P7IN.P7IN4 =1 wenn dcf77 mit msp430 nicht verbunden ist .
Port_7_8_P7IN.P7IN4 =0 wenn dcf77 mit msp430 verbunden ist.
Das ist aber das Gegenteil was ich haben will

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten morgen lieber Ausländer!

Also ich weiß bis jetzt nicht gnau, was du vor hast, aber mal ein paar 
Hinweise zu deinem Programm:

Wie du ja schon bemerkt hast, werden die Ports beim MSP üblicherweise 
NICHT mit PA, PB usw. angesprochen, sondern mit P1, P2 usw.

Welches Signal möchtest du denn genau vom DCF-Empfänger am MSP sichtbar 
machen? Und welches DCF-Modul benutzt du überhaupt?

Bist du dir sicher, dass du mit LPM3 nicht zuviel im Controller 
abschaltest? Da läuft meines Wissens nurnoch der ACLK. Benutzt du den? 
Für deinen Timer hast du den ja als Quelle eingestellt, aber hast du da 
auch einen Quarz dran? Wenn ja, OK, aber welchen, dann erklärt sich 
vielleicht auch der Timer mit seinen 125 Takten. Wieso fragst du den 
Eingang überhaupt in einem Timer ab?

Autor: Wolfgang-G (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>also, ich bin Neuling in Bereich Micorcontroller .
jeder fängt mal an.
Hast Du schon mal mit Deinem µC eine LED nach Deinem Willen zum Blinken 
gebracht? Oder die allgemeinen Spielchen, die man man als Anfänger so 
macht.
MfG

Autor: Ausländer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen

Dennis schrieb:

> machen? Und welches DCF-Modul benutzt du überhaupt?

Ich habe das DCF77 Modul vom Conrad

> Welches Signal möchtest du denn genau vom DCF-Empfänger am MSP sichtbar

Also dcf77 von Conrad hat 2 Signalausgänge Sout und non-Sout, ich möchte 
Sout mit uC bearbeiten

Dennis schrieb:
> Bist du dir sicher, dass du mit LPM3 nicht zuviel im Controller
> abschaltest? Da läuft meines Wissens nurnoch der ACLK.

LPM3 reicht(glaube ich ). ich brauch nur den ACLK

Dennis schrieb:
> Für deinen Timer hast du den ja als Quelle eingestellt, aber hast du da
> auch einen Quarz dran? Wenn ja, OK, aber welchen, dann erklärt sich
> vielleicht auch der Timer mit seinen 125 Takten

ja ich habe  einen XT2 mit 12Mhz

Dennis schrieb:
> Wieso fragst du den  Eingang überhaupt in einem Timer ab?

Ich glaube um ein Signal zufangen braucht macht ein Interrupt, und weil 
das P7 ist und kein P1_2 ist habe ich den Timer genommen?

Wolfgang-G schrieb:
> Hast Du schon mal mit Deinem µC eine LED nach Deinem Willen zum Blinken
> gebracht? Oder die allgemeinen Spielchen, die man man als Anfänger so
> macht.

:) ja das habe ich schon (mit while,[TimerA,timerB Rtc und 
watchdog]-Interrups , mit Taster ... das war alles Pout .jetzt bin bei 
der 2te stufe Pin

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ausländer schrieb:
> ja ich habe  einen XT2 mit 12Mhz

Du musst deine Taktquelle aber auch auf den Quarz umstellen... Und der 
ACLK ist i.d.R. nur für LF-Quarze wie die Uhrenquarze. Aber auch bei dem 
muss man dem Controller sagen, dass einer existiert.

Du arbeitest mit dem internen DCO. Dass der Timer da überhaupt was 
macht, wundert mich.

Ausländer schrieb:
> Ich glaube um ein Signal zufangen braucht macht ein Interrupt, und weil
> das P7 ist und kein P1_2 ist habe ich den Timer genommen?

Also das ist Quark. Natürlich macht man es, um ein plötzlich 
auftretendes Signal zu erfassen, aber man kann nicht irgendeinen 
Interrupt nehmen, um den Pin abzufragen...??!!

Dann mach dir zum Test doch erstmal ein
while (1)
{
  if (P7IN & BIT4)
  {
    P1OUT |= 0x02;
  }
  else
  {
    P1OUT &= ~0x02;
  }
}

Autor: Ausländer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Dennis schrieb:
> Du arbeitest mit dem internen DCO. Dass der Timer da überhaupt was
> macht, wundert mich


TA1CCTL0 = CCIE;
TA1CCR0 = 125;
TA1CTL = TASSEL_1 + MC_1 + TACLR;

In dem Fall ist ACLK = TACLK = 32768Hz  und DCO ist  ~1.045MHz
habe ich auch gemessen 131.7Hz ist fast gleich 32768Hz/(2*125)= 131.072 
Hz also der Timer funktioniert .

Dennis schrieb:
> aber man kann nicht irgendeinen
> Interrupt nehmen

Ja eben deswegen haben ich Timer A0 Interrupt genommen.

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ausländer schrieb:
> In dem Fall ist ACLK = TACLK = 32768Hz

Also hast du doch nen Uhrenquarz dran?

Ausländer schrieb:
> (2*125)

Misst du die togglende LED?

Ausländer schrieb:
> Dennis schrieb:
>> aber man kann nicht irgendeinen
>> Interrupt nehmen
>
> Ja eben deswegen haben ich Timer A0 Interrupt genommen.

Das widerspricht sich doch gerade...

Wenn du nur erstmal ein Signal sehen willst, dann nimm doch erstmal die 
while-Schleife und gucke, was da los ist.

Autor: Ausländer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
Dennis schrieb:
> Also hast du doch nen Uhrenquarz dran?

ja das habe ich

Dennis schrieb:
> Misst du die togglende LED?

ja

Dennis schrieb:
> Ausländer schrieb:
>
>> Dennis schrieb:
>
>>> aber man kann nicht irgendeinen
>
>>> Interrupt nehmen
>
>>
>
>> Ja eben deswegen haben ich Timer A0 Interrupt genommen.
>
>
>
> Das widerspricht sich doch gerade...

jetzt bin ich überfordert.

Dennis schrieb:
> dann nimm doch erstmal die  while-Schleife und gucke, was da los ist

habe ich gemacht  ,blincken beide ob dcf77 darn ist,oder nicht  .

(Ah noch was ich habe das DCF77 direkt mit den Pins verbunden ist das 
Okay ?)

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also irgendeinen Interrupt zu nehmen ist Blödsinn wollte ich damit 
sagen.

Mach den Timer weg und bau die while erstmal in die main.

Was macht dein DCF? Liefert die das ein HIGH oder LOW-Pegel oder ist es 
evtl. nur ein Open-Collector-Ausgang?

Setze vorsichtshalber mal noch das P7SEL &= ~BIT4.

Eigentlich braucht man das nicht, weil es das standardmäßig sein sollte, 
jedoch hatte ich auch schon MSPs, bei denen ein Port danach erst 
vernünftig anzusprechen war.

Autor: Ausländer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo

Dennis schrieb:
> Was macht dein DCF? Liefert die das ein HIGH oder LOW-Pegel oder ist es
>
> evtl. nur ein Open-Collector-Ausgang?

ist nur ein Open-Collector

Ich habe es jetzt so gemacht und es funktioniert.
(LED an wenn P7.4 und P7.6 verbunden sind .LED aus wenn nicht)
Ich glaube dann , dass das DCF77-Modul nicht in Ordnung ist.

//7.4 sin  7.6 vcc 


#include "msp430x54x.h"

void main(void)
{
 
  PAOUT  = 0;
  PADIR  = 0xFFFF;  
  PASEL  = 0;
  PBOUT  = 0;  
  PBDIR  = 0xFFFF;
  PBSEL  = 0;
  PCOUT  = 0;    
  PCDIR  = 0xFFFF;
  PCSEL  = 0;  
  PDOUT  = 0;  
  PDDIR  = 0xFFFF;
  PDSEL  = 0;  
  PEOUT  = 0;  
  PEDIR  = 0xFEFF;                                                          
  PESEL  = 0;  
  P11OUT = 0;
  P11DIR = 0xFF;
  PJOUT  = 0;    
  PJDIR  = 0xFF;
  P11SEL = 0;
  
  
  
  
  
    
  
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  TA1CCTL0 = CCIE;                          // CCR0 Interrupt Aktivieren
  TA1CCR0 = 1000;
  TA1CTL = TASSEL_1 + MC_1 + TACLR; 
  
  
  P1DIR |= 0x01;                           //  LED1
  P1DIR |= 0x02;                           // LED e 
  P7DIR = BIT6;                           // DCF77 VCC
  P7REN = BIT4;                             
  
 
  
  
  
   P7OUT =BIT6;                            // DCF77 VCC--->1
   
  
 
while(1)
{
  __bis_SR_register(LPM3_bits + GIE);       // LPM3 Modus + Interrupts Aktivieren 
}
}



#pragma vector=TIMER1_A0_VECTOR
__interrupt void TIMER1_A0_ISR(void)
{
 
  P1OUT ^= 0x01;                            // LED1 Blincken
  if(P7IN & BIT4)
   {
   P1OUT ^= 0x02;                        // LED2 Blincken wenn DCF77 Signal( port 7.4) vohanden ist 
   return ;
   }  

}


Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und jetzt lass mal den ganzen Krempel vor dem Abklemmen des Watchdogs 
weg. Der ist unnötig bzw. hat Nebeneffekte, die Dich 
durcheinanderbringen können.

Autor: Ausländer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
:-) das habe ich weggemacht.
Ich habe noch eine Frage.
LED2 Blinkte noch eine Weile nach dem Abklemmen und habe P7REN = BIT4; 
dazugefügt ist das die richtige Lösung .
Danke für eure Hilfe.

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ausländer schrieb:
> habe P7REN = BIT4;
> dazugefügt ist das die richtige Lösung

JA! Deswegen fragte ich nach dem Open-ColleCtor. Sonst geht es nämlich 
nicht.

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Obwohl du eigentlich dann auch P7OUT |= BIT4 setzen musst, um einen 
Pull-Up zu bekommen, den der Open-Collector dir nach unten ziehen kann.

Trotzdem - bei deinem Vorhaben hat das nichts mit dem Timer-Interrupt zu 
tun.

Aber wenn es dir so reicht, dann ist doch prima!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.