guten tag, ich bins wieder
ich hab ein problem mit meinem momentanen programm...
als "vorlage" habe mir das "testprogramm" für dieses board
heruntergeladen
da ich aber dieses ganze serverzeug nicht brauche, habe ich mir das für
mich wichtigste herauskopiert...
Hier mein momentanes programm^^
#include "msp430x14x.h"
#include "stdlib.h"
#include "stdio.h"
#define B1 BIT4&P4IN //B1 - P4.4
#define B2 BIT5&P4IN //B2 - P4.5
#define B3 BIT6&P4IN //B3 - P4.6
#define B4 BIT7&P4IN //B4 - P4.7
#define DI1 BIT1&P1IN //Digital Input 1
- P1.1
#define DI2 BIT2&P1IN //Digital Input 2
- P1.2
#define DI3 BIT3&P1IN //Digital Input 3
- P1.3
#define DI4 BIT4&P1IN //Digital Input 4
- P1.4
#define RELAY1_ON P1OUT |= BIT5 //RELAY1 - P1.5
#define RELAY1_OFF P1OUT &= ~BIT5 //RELAY1 - P1.5
#define RELAY2_ON P1OUT |= BIT6 //RELAY1 - P1.6
#define RELAY2_OFF P1OUT &= ~BIT6 //RELAY1 - P1.6
#define STATUS_LED_ON P2OUT &= ~BIT1 //STATUS_LED -
P2.1
#define STATUS_LED_OFF P2OUT |= BIT1 //STATUS_LED -
P2.1
#define BUZ1_ON P4OUT |= BIT2 //P4.2
#define BUZ1_OFF P4OUT &= ~BIT2 //P4.2
#define BUZ2_ON P4OUT |= BIT3 //P4.3
#define BUZ2_OFF P4OUT &= ~BIT3 //P4.3
#define _100us 66
#define _10us 6
#define E 3 //P2.3
#define bitset(var,bitno) ((var) |= 1 << (bitno))
#define bitclr(var,bitno) ((var) &= ~(1 << (bitno)))
#define RS 2 //P2.2
#define LCD_Data P2OUT
#define CLR_DISP 0x01
#define DISP_ON 0x0c
#define DD_RAM_ADDR 0x80
#define DD_RAM_ADDR2 0xc0
#define AI0_ON P6OUT |= BIT0 //AI0 - P6.0
#define AI0_OFF P6OUT &= ~BIT0 //AI0 - P6.0
const unsigned char LCD_Message[] = " HALLO WELT ..:----------:..";
const unsigned char P6_error_Message[] = " P6 error ";
const unsigned char EXT_error_Message[] = " EXT error ";
void InitPorts(void);
void Delay (unsigned int a);
void Delayx100us(unsigned char b);
void stopP6 (void);
void InitLCD(void);
void stop_ext (void);
void SEND_CMD (unsigned char e);
void SEND_CHAR (unsigned char d);
void _E(void);
unsigned char i,j,k,temp,RX_flag,cntr,time_out;
void main( void )
{
InitPorts();
if ((B2) == 0)
{
AI0_ON;
}
else
{
AI0_OFF;
}
if ((B3) == 0)
{
RELAY2_ON;
}
else
{
RELAY2_OFF;
}
while ((B4) == 0)
{
BUZ1_OFF;
BUZ2_ON;
Delay(_10us);
BUZ2_OFF;
BUZ1_ON;
Delay(66);
}
BUZ1_OFF;
BUZ2_OFF;
InitLCD();
WDTCTL = WDTPW + WDTHOLD;
for (i=0; i!=32; i++)
{
SEND_CHAR(LCD_Message[i]);
if (i==15) SEND_CMD (DD_RAM_ADDR2);
}
SEND_CMD(DD_RAM_ADDR);
RX_flag=0;
cntr = 0;
}
void InitPorts(void)
{
P1SEL = 0;
P1OUT = 0;
P1DIR = BIT5 | BIT6;
P2SEL = 0;
P2OUT = 0;
P2DIR = ~BIT0; //only P2.0 is input
P3SEL |= BIT4 | BIT5; //enable UART0
P3DIR |= BIT4; //enable TXD0 as output
P3DIR &= ~BIT5; //enable RXD0 as input
P4SEL = 0;
P4OUT = 0;
P4DIR = BIT2 | BIT3; //only buzzer pins are
outputs
P6SEL &= ~BIT0;
P6DIR |= BIT0; // all output
}
void Delay (unsigned int a)
{
for (k=0 ; k != a; ++k); //9+a*12 cycles
}
void Delayx100us(unsigned char b)
{
for (j=0; j!=b; ++j) Delay (_100us);
}
void stopP6 (void)
{
P6DIR = 0;
cntr=0;
SEND_CMD(CLR_DISP);
SEND_CMD(DD_RAM_ADDR);
for (i=0 ; i!= 16; i++) SEND_CHAR(P6_error_Message[i]);
while(1);
}
void stop_ext (void)
{
P2DIR &= ~BIT0;
P4DIR = 0;
cntr=0;
SEND_CMD(CLR_DISP);
SEND_CMD(DD_RAM_ADDR);
for (i=0 ; i!= 16; i++) SEND_CHAR(EXT_error_Message[i]);
while(1);
}
void _E(void)
{
bitset(P2OUT,E); //toggle E for LCD
Delay(_10us);
bitclr(P2OUT,E);
}
void SEND_CMD (unsigned char e)
{
Delayx100us(10); //10ms
temp = e & 0xf0; //get upper nibble
LCD_Data &= 0x0f;
LCD_Data |= temp; //send CMD to LCD
bitclr(P2OUT,RS); //set LCD to CMD mode
_E(); //toggle E for LCD
temp = e & 0x0f;
temp = temp << 4; //get down nibble
LCD_Data &= 0x0f;
LCD_Data |= temp;
bitclr(P2OUT,RS); //set LCD to CMD mode
_E(); //toggle E for LCD
}
void SEND_CHAR (unsigned char d)
{
Delayx100us(5); //.5ms
temp = d & 0xf0; //get upper nibble
LCD_Data &= 0x0f;
LCD_Data |= temp;
bitset(P2OUT,RS); //set LCD to data mode
_E(); //toggle E for LCD
temp = d & 0x0f;
temp = temp << 4; //get down nibble
LCD_Data &= 0x0f;
LCD_Data |= temp;
bitset(P2OUT,RS); //set LCD to data mode
_E(); //toggle E for LCD
}
void InitLCD(void)
{
bitclr(P2OUT,RS);
Delayx100us(250); //Delay 100ms
Delayx100us(250);
Delayx100us(250);
Delayx100us(250);
LCD_Data |= BIT4 | BIT5; //D7-D4 = 0011
LCD_Data &= ~BIT6 & ~BIT7;
_E(); //toggle E for LCD
Delayx100us(100); //10ms
_E(); //toggle E for LCD
Delayx100us(100); //10ms
_E(); //toggle E for LCD
Delayx100us(100); //10ms
LCD_Data &= ~BIT4;
_E(); //toggle E for LCD
SEND_CMD(DISP_ON);
SEND_CMD(CLR_DISP);
}
hier gehn die tastenbelegungen, also das relai, der buzzer und ein
signal auf port6
aber display is hier noch nicht beschrieben
wenn ich dann (WDTCTL = WDTPW + WDTHOLD; //Watchdog aus) im programm
weiter nach vorne gebe, um genau zu sein direkt unter die
Portinitialisierung, dann ist das display beschrieben, die
tastebelegungen funktionieren jedoch nicht mehr...
also entweder display oder taster^^
blick da nicht mehr durch
wisst ihr da weiter?!
mfG
Bonkas