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