Forum: Compiler & IDEs Problem mit UART und PWM auf MSP430G2211


von Valentin B. (nitnelav) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo,
ich habe ein kleines Problem bei der Programmierung eines MSP430G2211.

Die Hardware ist das Launchpad, allerdings mit dem kleineren der 
Prozessoren. Nun wollte ich es als UART-IO-Karte verwenden,
also mit einem digitalen und zwei analogen Kanälen
einen analogen Plotter ansteuern.

Für diesen Zweck habe ich einen Software-UART und
eine 8-Bit-Software-PWM mit Hilfe von Codebeispielen programmiert.
Leider ist bisher nur der digitale Kanal funktionstüchtig.
Warum funktionieren die analogen Kanäle nicht?
Hier ist der Teil des Codes, den ich selber geschrieben habe, der Rest 
ist im Anhang:
1
 while (1) {
2
        if (hasReceived) {   // Char recieved ?
3
            hasReceived = false;  // clear "hasReceived" flag
4
            
5
            if(selector != 2){
6
                                            
7
            putChar (23);  //Send ACK
8
            
9
            switch(RXByte){
10
              case 0:{
11
                putChar(42);
12
              }break;
13
              
14
              case 1:{ //Analog channel 1
15
                selected_channel = 1;
16
                selector = 2;  
17
              }break;
18
              
19
              case 2:{ //Analog channel 2
20
                selected_channel = 2;
21
                selector = 2;  
22
              }break;
23
              
24
              case 3:{//Digital Channel
25
                selected_channel = 3;
26
                selector = 2;  
27
              }break;
28
              
29
              case 4:{ //Reset analog
30
                channel1 = 0;
31
                channel2 = 0;
32
                selector = 2;
33
              }break;
34
              
35
              case 5:{ //Reset all
36
                channel1 = 0;
37
                channel2 = 0;
38
                digiput = 1;
39
                selector = 2;
40
              }break;
41
            }
42
           }else{
43
             switch(selected_channel){
44
               case 1:{
45
                 channel1 = RXByte;
46
               }break;
47
               
48
               case 2:{
49
                 channel2 = RXByte;
50
               }break;
51
               
52
               case 3:{
53
              digiput = RXByte;
54
              
55
               }
56
             }
57
             selector = 1;
58
            }
59
        }
60
        if (~hasReceived) __bis_SR_register (CPUOFF + GIE);
61
        
62
        //Handle digital output
63
        if(digiput){
64
          P1OUT &= ~(BIT0);
65
        }else{
66
          P1OUT |= BIT0;  
67
        }
68
        
69
        //Handle analog channel 1
70
        counter1++;
71
        if(counter1 == 0){
72
          P1OUT |= BIT4;  
73
        }
74
        if(counter1 == channel1){
75
          P1OUT &= ~(BIT4);  
76
        }
77
        if(counter1 == 255){
78
          counter1 = 0;  
79
        }
80
        
81
        //Handle analog channel 2
82
        counter2++;
83
        if(counter2 == 0){
84
          P1OUT |= BIT5;  
85
        }
86
        if(counter2 == channel2){
87
          P1OUT &= ~(BIT5);  
88
        }
89
        if(counter2 == 255){
90
          counter2 = 0;  
91
        }
92
        
93
    }
Es wäre nett, wenn ihr mir helfen könntet.
Mit freundlichen Grüßen,
Valentin Buck

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.