mit Buttons/PWM als einzelne cpp und init in main

Dependencies:   mbed mbed-rtos X_NUCLEO_IHM02A1

Committer:
scherfa2
Date:
Wed Apr 17 07:55:47 2019 +0000
Revision:
31:4bb6d2cedad2
Parent:
30:e464b2bb2376
Update Display

Who changed what in which revision?

UserRevisionLine numberNew contents of line
scherfa2 30:e464b2bb2376 1 #include "mbed.h"
scherfa2 30:e464b2bb2376 2 #include "Display.h"
scherfa2 30:e464b2bb2376 3 #include "main.h"
scherfa2 30:e464b2bb2376 4
scherfa2 30:e464b2bb2376 5 /*************************************************************
scherfa2 30:e464b2bb2376 6 * PA10 (D2) (Select Steppmotor Treiber2)
scherfa2 30:e464b2bb2376 7 * PA7 (D11) (mosi Steppmotor Treiber1)
scherfa2 30:e464b2bb2376 8 * PA6 (D12) (miso Steppmotor Treiber1)
scherfa2 30:e464b2bb2376 9 * PA4 (A2) (Select Steppmotor Treiber1)
scherfa2 30:e464b2bb2376 10 *
scherfa2 30:e464b2bb2376 11 * PB15 (mosi Steppmotor Treiber2)
scherfa2 30:e464b2bb2376 12 * PB14 (miso Steppmotor Treiber2)
scherfa2 30:e464b2bb2376 13 * PB13 (slk Steppmotor Treiber2)
scherfa2 30:e464b2bb2376 14 * PB6 (D10)(pwm_io)(CN5-3)
scherfa2 30:e464b2bb2376 15 * PB5 (D4)(Standby_reset Steppmotor)
scherfa2 30:e464b2bb2376 16 * PB4 (D5)(pwm_io2)(CN9-6)
scherfa2 30:e464b2bb2376 17 * PB3 (D3)(Select Steppmotor Treiber1)
scherfa2 30:e464b2bb2376 18
scherfa2 30:e464b2bb2376 19 * PC1 (A4)(Flag_irq Steppmotor)
scherfa2 30:e464b2bb2376 20 * PC0 (A5)(Busy_irq Steppmotor)
scherfa2 30:e464b2bb2376 21
scherfa2 30:e464b2bb2376 22 **************************************************************/
scherfa2 30:e464b2bb2376 23
scherfa2 31:4bb6d2cedad2 24 DigitalOut RS(PC_3);
scherfa2 31:4bb6d2cedad2 25 DigitalOut RW(PC_2);
scherfa2 31:4bb6d2cedad2 26 DigitalOut E(PB_7);
scherfa2 31:4bb6d2cedad2 27 DigitalOut bit0(PA_15);
scherfa2 31:4bb6d2cedad2 28 DigitalOut bit1(PA_14);
scherfa2 31:4bb6d2cedad2 29 DigitalOut bit2(PA_13);
scherfa2 31:4bb6d2cedad2 30 DigitalOut bit3(PC_12);
scherfa2 31:4bb6d2cedad2 31 DigitalOut bit4(PC_10);
scherfa2 31:4bb6d2cedad2 32 DigitalOut bit5(PC_8);
scherfa2 31:4bb6d2cedad2 33 DigitalOut bit6(PC_6);
scherfa2 31:4bb6d2cedad2 34 DigitalOut bit7(PC_5);
scherfa2 30:e464b2bb2376 35
scherfa2 30:e464b2bb2376 36 /**************************************************************
scherfa2 30:e464b2bb2376 37 Sendebefehls-Funktion für das Display MIDAS
scherfa2 30:e464b2bb2376 38 E=Enable, RS= Register Select Signal, RW= Data Read/Wirte
scherfa2 30:e464b2bb2376 39 Siehe MIDAS Datasheet 6.3.1 Write Mode Timing Diagramm
scherfa2 30:e464b2bb2376 40 **************************************************************/
scherfa2 30:e464b2bb2376 41 void DisplaySendeBefehl(unsigned char befehl)
scherfa2 30:e464b2bb2376 42 {
scherfa2 30:e464b2bb2376 43 RW=0;
scherfa2 30:e464b2bb2376 44 E=0;
scherfa2 30:e464b2bb2376 45 RS=0;
scherfa2 30:e464b2bb2376 46 wait_us(1); //delay>0
scherfa2 30:e464b2bb2376 47 E=1;
scherfa2 30:e464b2bb2376 48 wait_ms(1);
scherfa2 30:e464b2bb2376 49 bit0= (befehl>>0)&0x01;
scherfa2 30:e464b2bb2376 50 bit1= (befehl>>1)&0x01;
scherfa2 30:e464b2bb2376 51 bit2= (befehl>>2)&0x01;
scherfa2 30:e464b2bb2376 52 bit3= (befehl>>3)&0x01;
scherfa2 30:e464b2bb2376 53 bit4= (befehl>>4)&0x01;
scherfa2 30:e464b2bb2376 54 bit5= (befehl>>5)&0x01;
scherfa2 30:e464b2bb2376 55 bit6= (befehl>>6)&0x01;
scherfa2 30:e464b2bb2376 56 bit7= (befehl>>7)&0x01;
scherfa2 30:e464b2bb2376 57 wait_ms(1);
scherfa2 30:e464b2bb2376 58 E=0;
scherfa2 30:e464b2bb2376 59 wait_ms(1);
scherfa2 30:e464b2bb2376 60 RS=0;
scherfa2 30:e464b2bb2376 61 RW=0;
scherfa2 30:e464b2bb2376 62 bit0=0;
scherfa2 30:e464b2bb2376 63 bit1=0;
scherfa2 30:e464b2bb2376 64 bit2=0;
scherfa2 30:e464b2bb2376 65 bit3=0;
scherfa2 30:e464b2bb2376 66 bit4=0;
scherfa2 30:e464b2bb2376 67 bit5=0;
scherfa2 30:e464b2bb2376 68 bit6=0;
scherfa2 30:e464b2bb2376 69 bit7=0;
scherfa2 30:e464b2bb2376 70 wait_ms(1);
scherfa2 30:e464b2bb2376 71 /*
scherfa2 30:e464b2bb2376 72 PORTB= PORTB & 0b11111000; // RW=0,E=0,RS=0
scherfa2 30:e464b2bb2376 73 _delay_ms(1); // delay>40ns tAS
scherfa2 30:e464b2bb2376 74 PORTB= PORTB | 0b00000100; // E=1, Rest wie bis anhin
scherfa2 30:e464b2bb2376 75 _delay_ms(1); // delay>460ns tpw
scherfa2 30:e464b2bb2376 76 PORTA = Befehl; // Daten für Befehl
scherfa2 30:e464b2bb2376 77 _delay_ms(1); // delay>80ns tsp2
scherfa2 30:e464b2bb2376 78 PORTB= PORTB & 0b11111011; // E=0, Rest wie bis anhin
scherfa2 30:e464b2bb2376 79 _delay_ms(1); // delay>10ns thd1 &(5ns thd2)
scherfa2 30:e464b2bb2376 80 PORTB= PORTB & 0b11111100; // RW=0,RS=0
scherfa2 30:e464b2bb2376 81 PORTA= 0; // Port A löschen (gesendete Daten)
scherfa2 30:e464b2bb2376 82 _delay_ms(1); // alle delays ab E=1 >500ns tc
scherfa2 30:e464b2bb2376 83
scherfa2 30:e464b2bb2376 84 */
scherfa2 30:e464b2bb2376 85 }
scherfa2 30:e464b2bb2376 86 /**************************************************************
scherfa2 30:e464b2bb2376 87 Sende-Zeichen-Funktion für das Display Midas
scherfa2 30:e464b2bb2376 88 Es können ASCI basierende Zeichen gesendet werden wie 'A' etc.
scherfa2 30:e464b2bb2376 89 **************************************************************/
scherfa2 30:e464b2bb2376 90 void DisplaySendeZeichen(unsigned char Zeichen)
scherfa2 30:e464b2bb2376 91 {
scherfa2 30:e464b2bb2376 92 RW=0;
scherfa2 30:e464b2bb2376 93 E=0;
scherfa2 30:e464b2bb2376 94 RS=0;
scherfa2 30:e464b2bb2376 95 RS=1;
scherfa2 30:e464b2bb2376 96 wait_ms(1);
scherfa2 30:e464b2bb2376 97 E=1;
scherfa2 30:e464b2bb2376 98 wait_ms(1);
scherfa2 30:e464b2bb2376 99 bit0= (Zeichen>>0)&0x01;
scherfa2 30:e464b2bb2376 100 bit1= (Zeichen>>1)&0x01;
scherfa2 30:e464b2bb2376 101 bit2= (Zeichen>>2)&0x01;
scherfa2 30:e464b2bb2376 102 bit3= (Zeichen>>3)&0x01;
scherfa2 30:e464b2bb2376 103 bit4= (Zeichen>>4)&0x01;
scherfa2 30:e464b2bb2376 104 bit5= (Zeichen>>5)&0x01;
scherfa2 30:e464b2bb2376 105 bit6= (Zeichen>>6)&0x01;
scherfa2 30:e464b2bb2376 106 bit7= (Zeichen>>7)&0x01;
scherfa2 30:e464b2bb2376 107 wait_ms(1);
scherfa2 30:e464b2bb2376 108 E=0;
scherfa2 30:e464b2bb2376 109 wait_ms(1);
scherfa2 30:e464b2bb2376 110 RS=0;
scherfa2 30:e464b2bb2376 111 RW=0;
scherfa2 30:e464b2bb2376 112 bit0=0;
scherfa2 30:e464b2bb2376 113 bit1=0;
scherfa2 30:e464b2bb2376 114 bit2=0;
scherfa2 30:e464b2bb2376 115 bit3=0;
scherfa2 30:e464b2bb2376 116 bit4=0;
scherfa2 30:e464b2bb2376 117 bit5=0;
scherfa2 30:e464b2bb2376 118 bit6=0;
scherfa2 30:e464b2bb2376 119 bit7=0;
scherfa2 30:e464b2bb2376 120 wait_ms(1);
scherfa2 30:e464b2bb2376 121
scherfa2 30:e464b2bb2376 122
scherfa2 30:e464b2bb2376 123 /*PORTB= PORTB & 0b11111000; // RW=0,E=0,RS=0
scherfa2 30:e464b2bb2376 124 PORTB= PORTB | 0b00000001; // RS=1
scherfa2 30:e464b2bb2376 125 _delay_ms(1); // delay>40ns tsp1
scherfa2 30:e464b2bb2376 126 PORTB= PORTB | 0b00000100; // E=1, Rest wie bis anhin
scherfa2 30:e464b2bb2376 127 _delay_ms(1); // delay>230ns tpw
scherfa2 30:e464b2bb2376 128 PORTA = Zeichen; // Daten für Zeichen
scherfa2 30:e464b2bb2376 129 _delay_ms(1); // delay>80ns tsp2
scherfa2 30:e464b2bb2376 130 PORTB= PORTB & 0b11111011; // E=0, Rest wie bis anhin
scherfa2 30:e464b2bb2376 131 _delay_ms(1); // delay>10ns thd1 &(5ns thd2)
scherfa2 30:e464b2bb2376 132 PORTB= PORTB & 0b11111100; // RW=0,RS=0
scherfa2 30:e464b2bb2376 133 PORTA= 0; // Port A löschen (gesendete Daten)
scherfa2 30:e464b2bb2376 134 _delay_ms(1); // alle delays ab E=1 >500ns tc*/
scherfa2 30:e464b2bb2376 135
scherfa2 30:e464b2bb2376 136 }
scherfa2 30:e464b2bb2376 137
scherfa2 30:e464b2bb2376 138 /**************************************************************
scherfa2 30:e464b2bb2376 139 Sende-String-Funktion für das Display Midas
scherfa2 30:e464b2bb2376 140 Es können ASCI basierende Strings gesendet werden wie "ABC" etc.
scherfa2 30:e464b2bb2376 141 Der Sendestring ist auf 20 Zeichen beschränkt, da eine Display-
scherfa2 30:e464b2bb2376 142 Lein ebenfalls nur 20 Felder besitzt.
scherfa2 30:e464b2bb2376 143 **************************************************************/
scherfa2 30:e464b2bb2376 144 void DisplaySendeString(char *String)
scherfa2 30:e464b2bb2376 145 {
scherfa2 30:e464b2bb2376 146 int x;
scherfa2 30:e464b2bb2376 147 for(x = 0; (x < 20) && (*String != 0); x++) // solange ein Zeichen=0 ist
scherfa2 30:e464b2bb2376 148 {
scherfa2 30:e464b2bb2376 149 DisplaySendeZeichen(*String); // Zeichen durch Pointer
scherfa2 30:e464b2bb2376 150 String++; // Pointer auf nächstes Zeichen
scherfa2 30:e464b2bb2376 151 }
scherfa2 30:e464b2bb2376 152 }
scherfa2 30:e464b2bb2376 153
scherfa2 30:e464b2bb2376 154 /**************************************************************
scherfa2 30:e464b2bb2376 155 Midas Display Initalisierungs-Fuktion
scherfa2 30:e464b2bb2376 156 **************************************************************/
scherfa2 30:e464b2bb2376 157 void DisplayInit()
scherfa2 30:e464b2bb2376 158 {
scherfa2 30:e464b2bb2376 159 wait_ms(40);
scherfa2 30:e464b2bb2376 160 DisplaySendeBefehl(0b00111100); //
scherfa2 30:e464b2bb2376 161 wait_ms(1);
scherfa2 30:e464b2bb2376 162 DisplaySendeBefehl(0b00111100);
scherfa2 30:e464b2bb2376 163 wait_ms(1);
scherfa2 30:e464b2bb2376 164 DisplaySendeBefehl(0b00001000);
scherfa2 30:e464b2bb2376 165 wait_ms(1);
scherfa2 30:e464b2bb2376 166 DisplaySendeBefehl(0b00000001);
scherfa2 30:e464b2bb2376 167 wait_ms(3);
scherfa2 30:e464b2bb2376 168 DisplaySendeBefehl(0b00000110);
scherfa2 30:e464b2bb2376 169
scherfa2 30:e464b2bb2376 170
scherfa2 30:e464b2bb2376 171
scherfa2 30:e464b2bb2376 172
scherfa2 30:e464b2bb2376 173
scherfa2 30:e464b2bb2376 174
scherfa2 30:e464b2bb2376 175 /*_delay_ms(20); // delay>15ms
scherfa2 30:e464b2bb2376 176 DisplaySendeBefehl(0b00110000); // Instruktion
scherfa2 30:e464b2bb2376 177 _delay_ms(5); // delay>4.1ms
scherfa2 30:e464b2bb2376 178 DisplaySendeBefehl(0b00110000); // Instruktion
scherfa2 30:e464b2bb2376 179 _delay_ms(5); // delay>100us
scherfa2 30:e464b2bb2376 180 DisplaySendeBefehl(0b00110000); // Instruktion
scherfa2 30:e464b2bb2376 181 DisplaySendeBefehl(0b00111100); // 8bit-,2line-,5x11dots mode
scherfa2 30:e464b2bb2376 182 DisplaySendeBefehl(0b00001000); // Display off
scherfa2 30:e464b2bb2376 183 DisplaySendeBefehl(0b00000001); // Display clear
scherfa2 30:e464b2bb2376 184 DisplaySendeBefehl(0b00000110); // Entry mode set*/
scherfa2 30:e464b2bb2376 185 }
scherfa2 30:e464b2bb2376 186
scherfa2 30:e464b2bb2376 187 /**************************************************************
scherfa2 30:e464b2bb2376 188 Gehe zu X, Y -Funktion für das Display.
scherfa2 30:e464b2bb2376 189 X ist die Horizontale, Y die Vertikale
scherfa2 30:e464b2bb2376 190 X muss 20<=x>0 sein / Y muss 4<=y>0 sein
scherfa2 30:e464b2bb2376 191
scherfa2 30:e464b2bb2376 192 Zeilen des Displays wie folgt:
scherfa2 30:e464b2bb2376 193 y
scherfa2 30:e464b2bb2376 194 1. 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 x
scherfa2 30:e464b2bb2376 195 3. 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 x
scherfa2 30:e464b2bb2376 196 2. 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 x
scherfa2 30:e464b2bb2376 197 4. 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 x
scherfa2 30:e464b2bb2376 198 **************************************************************/
scherfa2 30:e464b2bb2376 199 void gotoxy(unsigned char x, unsigned char y)
scherfa2 30:e464b2bb2376 200 {
scherfa2 30:e464b2bb2376 201 unsigned char data = 0;
scherfa2 30:e464b2bb2376 202
scherfa2 30:e464b2bb2376 203 switch (y)
scherfa2 30:e464b2bb2376 204 {
scherfa2 30:e464b2bb2376 205 case 1:
scherfa2 30:e464b2bb2376 206 data = 0b10000000 | (0x00+x-1); // +0 (0x00)
scherfa2 30:e464b2bb2376 207 break;
scherfa2 30:e464b2bb2376 208
scherfa2 30:e464b2bb2376 209 case 2: //
scherfa2 30:e464b2bb2376 210 data = 0b10000000 | (0x14+x-1); // +20 (0x14)
scherfa2 30:e464b2bb2376 211 break;
scherfa2 30:e464b2bb2376 212
scherfa2 30:e464b2bb2376 213 case 3:
scherfa2 30:e464b2bb2376 214 data = 0b10000000 | (0x40+x-1); // +64 (0x40)
scherfa2 30:e464b2bb2376 215 break;
scherfa2 30:e464b2bb2376 216
scherfa2 30:e464b2bb2376 217 case 4:
scherfa2 30:e464b2bb2376 218 data = 0b10000000 | (0x54+x-1); // +84 (0x54)
scherfa2 30:e464b2bb2376 219 break;
scherfa2 30:e464b2bb2376 220
scherfa2 30:e464b2bb2376 221 }
scherfa2 30:e464b2bb2376 222 DisplaySendeBefehl(data); // Berechneter Übergabeparameter data
scherfa2 30:e464b2bb2376 223 }
scherfa2 30:e464b2bb2376 224
scherfa2 30:e464b2bb2376 225
scherfa2 30:e464b2bb2376 226