mit Buttons/PWM als einzelne cpp und init in main

Dependencies:   mbed mbed-rtos X_NUCLEO_IHM02A1

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
+}
+
+
+