mit Buttons/PWM als einzelne cpp und init in main
Dependencies: mbed mbed-rtos X_NUCLEO_IHM02A1
Diff: Display.cpp
- Revision:
- 30:e464b2bb2376
- Child:
- 31:4bb6d2cedad2
- Child:
- 33:de144094bdd1
diff -r b84d0cc8bac8 -r e464b2bb2376 Display.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Display.cpp Thu Apr 11 15:20:05 2019 +0000 @@ -0,0 +1,237 @@ + #include "mbed.h" +#include "Display.h" +#include "main.h" + +/************************************************************* + * PA10 (D2) (Select Steppmotor Treiber2) + * PA7 (D11) (mosi Steppmotor Treiber1) + * PA6 (D12) (miso Steppmotor Treiber1) + * PA4 (A2) (Select Steppmotor Treiber1) + * + * PB15 (mosi Steppmotor Treiber2) + * PB14 (miso Steppmotor Treiber2) + * PB13 (slk Steppmotor Treiber2) + * PB6 (D10)(pwm_io)(CN5-3) + * PB5 (D4)(Standby_reset Steppmotor) + * PB4 (D5)(pwm_io2)(CN9-6) + * PB3 (D3)(Select Steppmotor Treiber1) + + * PC1 (A4)(Flag_irq Steppmotor) + * PC0 (A5)(Busy_irq Steppmotor) + + PA0 (RS) + PA1 (RW) + PA8 (E) + PB6 (Data0) + PA5 (Data1) + PA9 (Data2) + PB10 (Data3) + PB0 (Data4) + PB7 (Data5) + PB8 (Data6) + PB9 (Data7) +**************************************************************/ + +DigitalOut RS(PA_0); +DigitalOut RW(PA_1); +DigitalOut E(PA_8); +DigitalOut bit0(PB_6); +DigitalOut bit1(PA_5); +DigitalOut bit2(PA_9); +DigitalOut bit3(PB_10); +DigitalOut bit4(PB_0); +DigitalOut bit5(PC_7); +DigitalOut bit6(PB_8); +DigitalOut bit7(PB_9); + +/************************************************************** +Sendebefehls-Funktion für das Display MIDAS +E=Enable, RS= Register Select Signal, RW= Data Read/Wirte +Siehe MIDAS Datasheet 6.3.1 Write Mode Timing Diagramm +**************************************************************/ +void DisplaySendeBefehl(unsigned char befehl) +{ + RW=0; + E=0; + RS=0; + wait_us(1); //delay>0 + E=1; + wait_ms(1); + bit0= (befehl>>0)&0x01; + bit1= (befehl>>1)&0x01; + bit2= (befehl>>2)&0x01; + bit3= (befehl>>3)&0x01; + bit4= (befehl>>4)&0x01; + bit5= (befehl>>5)&0x01; + bit6= (befehl>>6)&0x01; + bit7= (befehl>>7)&0x01; + wait_ms(1); + E=0; + wait_ms(1); + RS=0; + RW=0; + bit0=0; + bit1=0; + bit2=0; + bit3=0; + bit4=0; + bit5=0; + bit6=0; + bit7=0; + wait_ms(1); + /* + PORTB= PORTB & 0b11111000; // RW=0,E=0,RS=0 + _delay_ms(1); // delay>40ns tAS + PORTB= PORTB | 0b00000100; // E=1, Rest wie bis anhin + _delay_ms(1); // delay>460ns tpw + PORTA = Befehl; // Daten für Befehl + _delay_ms(1); // delay>80ns tsp2 + PORTB= PORTB & 0b11111011; // E=0, Rest wie bis anhin + _delay_ms(1); // delay>10ns thd1 &(5ns thd2) + PORTB= PORTB & 0b11111100; // RW=0,RS=0 + PORTA= 0; // Port A löschen (gesendete Daten) + _delay_ms(1); // alle delays ab E=1 >500ns tc + + */ +} +/************************************************************** +Sende-Zeichen-Funktion für das Display Midas +Es können ASCI basierende Zeichen gesendet werden wie 'A' etc. +**************************************************************/ +void DisplaySendeZeichen(unsigned char Zeichen) +{ + RW=0; + E=0; + RS=0; + RS=1; + wait_ms(1); + E=1; + wait_ms(1); + bit0= (Zeichen>>0)&0x01; + bit1= (Zeichen>>1)&0x01; + bit2= (Zeichen>>2)&0x01; + bit3= (Zeichen>>3)&0x01; + bit4= (Zeichen>>4)&0x01; + bit5= (Zeichen>>5)&0x01; + bit6= (Zeichen>>6)&0x01; + bit7= (Zeichen>>7)&0x01; + wait_ms(1); + E=0; + wait_ms(1); + RS=0; + RW=0; + bit0=0; + bit1=0; + bit2=0; + bit3=0; + bit4=0; + bit5=0; + bit6=0; + bit7=0; + wait_ms(1); + + + /*PORTB= PORTB & 0b11111000; // RW=0,E=0,RS=0 + PORTB= PORTB | 0b00000001; // RS=1 + _delay_ms(1); // delay>40ns tsp1 + PORTB= PORTB | 0b00000100; // E=1, Rest wie bis anhin + _delay_ms(1); // delay>230ns tpw + PORTA = Zeichen; // Daten für Zeichen + _delay_ms(1); // delay>80ns tsp2 + PORTB= PORTB & 0b11111011; // E=0, Rest wie bis anhin + _delay_ms(1); // delay>10ns thd1 &(5ns thd2) + PORTB= PORTB & 0b11111100; // RW=0,RS=0 + PORTA= 0; // Port A löschen (gesendete Daten) + _delay_ms(1); // alle delays ab E=1 >500ns tc*/ + +} + +/************************************************************** +Sende-String-Funktion für das Display Midas +Es können ASCI basierende Strings gesendet werden wie "ABC" etc. +Der Sendestring ist auf 20 Zeichen beschränkt, da eine Display- +Lein ebenfalls nur 20 Felder besitzt. +**************************************************************/ +void DisplaySendeString(char *String) +{ + int x; + for(x = 0; (x < 20) && (*String != 0); x++) // solange ein Zeichen=0 ist + { + DisplaySendeZeichen(*String); // Zeichen durch Pointer + String++; // Pointer auf nächstes Zeichen + } +} + +/************************************************************** +Midas Display Initalisierungs-Fuktion +**************************************************************/ +void DisplayInit() +{ + wait_ms(40); + DisplaySendeBefehl(0b00111100); // + wait_ms(1); + DisplaySendeBefehl(0b00111100); + wait_ms(1); + DisplaySendeBefehl(0b00001000); + wait_ms(1); + DisplaySendeBefehl(0b00000001); + wait_ms(3); + DisplaySendeBefehl(0b00000110); + + + + + + + /*_delay_ms(20); // delay>15ms + DisplaySendeBefehl(0b00110000); // Instruktion + _delay_ms(5); // delay>4.1ms + DisplaySendeBefehl(0b00110000); // Instruktion + _delay_ms(5); // delay>100us + DisplaySendeBefehl(0b00110000); // Instruktion + DisplaySendeBefehl(0b00111100); // 8bit-,2line-,5x11dots mode + DisplaySendeBefehl(0b00001000); // Display off + DisplaySendeBefehl(0b00000001); // Display clear + DisplaySendeBefehl(0b00000110); // Entry mode set*/ +} + +/************************************************************** + Gehe zu X, Y -Funktion für das Display. + X ist die Horizontale, Y die Vertikale + X muss 20<=x>0 sein / Y muss 4<=y>0 sein + + Zeilen des Displays wie folgt: + y + 1. 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 x + 3. 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 x + 2. 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 x + 4. 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 x +**************************************************************/ +void gotoxy(unsigned char x, unsigned char y) +{ + unsigned char data = 0; + + switch (y) + { + case 1: + data = 0b10000000 | (0x00+x-1); // +0 (0x00) + break; + + case 2: // + data = 0b10000000 | (0x14+x-1); // +20 (0x14) + break; + + case 3: + data = 0b10000000 | (0x40+x-1); // +64 (0x40) + break; + + case 4: + data = 0b10000000 | (0x54+x-1); // +84 (0x54) + break; + + } + DisplaySendeBefehl(data); // Berechneter Übergabeparameter data +} + + +