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
1
//7.4 sin 7.6 vcc
2
3
4
#include"msp430x54x.h"
5
6
voidmain(void)
7
{
8
PAOUT=0;
9
PADIR=0xFFFF;
10
PASEL=0;
11
PBOUT=0;
12
PBDIR=0xFFFF;
13
PBSEL=0;
14
PCOUT=0;
15
PCDIR=0xFFFF;
16
PCSEL=0;
17
PDOUT=0;
18
PDDIR=0xFFFF;
19
PDSEL=0;
20
PEOUT=0;
21
PEDIR=0xFEFF;
22
PESEL=0;
23
P11OUT=0;
24
P11DIR=0xFF;
25
PJOUT=0;
26
PJDIR=0xFF;
27
P11SEL=0;
28
29
30
31
WDTCTL=WDTPW+WDTHOLD;// Stop WDT
32
TA1CCTL0=CCIE;// CCR0 Interrupt Aktivieren
33
TA1CCR0=125;
34
TA1CTL=TASSEL_1+MC_1+TACLR;
35
36
37
P1DIR|=0x01;// LED1
38
P1DIR|=0x02;// LED e
39
P7DIR|=BIT6;// DCF77 VCC
40
P7IN|=BIT4;
41
42
43
44
P7OUT=BIT6;// DCF77 VCC--->1
45
46
47
48
49
__bis_SR_register(LPM3_bits+GIE);// LPM3 Modus + Interrupts Aktivieren
50
51
}
52
53
54
55
#pragma vector=TIMER1_A0_VECTOR
56
__interruptvoidTIMER1_A0_ISR(void)
57
{
58
59
P1OUT^=0x01;// LED1 Blincken
60
if((P7IN&BIT4))
61
{
62
P1OUT^=0x02;// LED2 Blincken wenn DCF77 Signal( port 7.6) vohanden ist
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.
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
1
//7.4 sin 7.6 vcc
2
3
4
#include"msp430x54x.h"
5
6
voidmain(void)
7
{
8
9
10
11
12
WDTCTL=WDTPW+WDTHOLD;// Stop WDT
13
TA1CCTL0=CCIE;// CCR0 Interrupt Aktivieren
14
TA1CCR0=125;
15
TA1CTL=TASSEL_1+MC_1+TACLR;
16
17
18
P1DIR|=0x01;// LED1
19
P1DIR|=0x02;// LED e
20
P7DIR|=BIT6;// DCF77 VCC
21
22
23
24
25
P7OUT=BIT6;// DCF77 VCC--->1
26
27
28
29
30
__bis_SR_register(LPM3_bits+GIE);// LPM3 Modus + Interrupts Aktivieren
31
32
}
33
34
35
36
#pragma vector=TIMER1_A0_VECTOR
37
__interruptvoidTIMER1_A0_ISR(void)
38
{
39
40
P1OUT^=0x01;// LED1 Blincken
41
if((P7IN&BIT4))
42
{
43
P1OUT^=0x02;// LED2 Blincken wenn DCF77 Signal( port 7.4) vohanden ist
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
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
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?
>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
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
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
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.
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.
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 ?)
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.
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.
1
//7.4 sin 7.6 vcc
2
3
4
#include"msp430x54x.h"
5
6
voidmain(void)
7
{
8
9
PAOUT=0;
10
PADIR=0xFFFF;
11
PASEL=0;
12
PBOUT=0;
13
PBDIR=0xFFFF;
14
PBSEL=0;
15
PCOUT=0;
16
PCDIR=0xFFFF;
17
PCSEL=0;
18
PDOUT=0;
19
PDDIR=0xFFFF;
20
PDSEL=0;
21
PEOUT=0;
22
PEDIR=0xFEFF;
23
PESEL=0;
24
P11OUT=0;
25
P11DIR=0xFF;
26
PJOUT=0;
27
PJDIR=0xFF;
28
P11SEL=0;
29
30
31
32
33
34
35
36
WDTCTL=WDTPW+WDTHOLD;// Stop WDT
37
TA1CCTL0=CCIE;// CCR0 Interrupt Aktivieren
38
TA1CCR0=1000;
39
TA1CTL=TASSEL_1+MC_1+TACLR;
40
41
42
P1DIR|=0x01;// LED1
43
P1DIR|=0x02;// LED e
44
P7DIR=BIT6;// DCF77 VCC
45
P7REN=BIT4;
46
47
48
49
50
51
P7OUT=BIT6;// DCF77 VCC--->1
52
53
54
55
while(1)
56
{
57
__bis_SR_register(LPM3_bits+GIE);// LPM3 Modus + Interrupts Aktivieren
58
}
59
}
60
61
62
63
#pragma vector=TIMER1_A0_VECTOR
64
__interruptvoidTIMER1_A0_ISR(void)
65
{
66
67
P1OUT^=0x01;// LED1 Blincken
68
if(P7IN&BIT4)
69
{
70
P1OUT^=0x02;// LED2 Blincken wenn DCF77 Signal( port 7.4) vohanden ist
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.
:-) 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.
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.
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!