Jack Hansdampf / Mbed OS Motorino
Committer:
jack1930
Date:
Fri Sep 24 15:28:27 2021 +0000
Revision:
0:86d0148c14a6
Motorino Joy-IT Ansteuerung mit STM32-Nucleo

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jack1930 0:86d0148c14a6 1 /* mbed Microcontroller Library
jack1930 0:86d0148c14a6 2 * Copyright (c) 2019 ARM Limited
jack1930 0:86d0148c14a6 3 * SPDX-License-Identifier: Apache-2.0
jack1930 0:86d0148c14a6 4 */
jack1930 0:86d0148c14a6 5
jack1930 0:86d0148c14a6 6 #include "mbed.h"
jack1930 0:86d0148c14a6 7 #include "platform/mbed_thread.h"
jack1930 0:86d0148c14a6 8
jack1930 0:86d0148c14a6 9 #define adresse 0x80
jack1930 0:86d0148c14a6 10 #define EXTCLK 1<<6
jack1930 0:86d0148c14a6 11 #define SLEEP 1<<4
jack1930 0:86d0148c14a6 12 #define AI 1<<5
jack1930 0:86d0148c14a6 13 #define PRE_SCALE 0xFE
jack1930 0:86d0148c14a6 14
jack1930 0:86d0148c14a6 15 #define MODE1 0x0
jack1930 0:86d0148c14a6 16 #define MODE2 0x1
jack1930 0:86d0148c14a6 17 #define LED0_ON_L 0x06
jack1930 0:86d0148c14a6 18
jack1930 0:86d0148c14a6 19 I2C motorino(D14,D15);
jack1930 0:86d0148c14a6 20 AnalogIn poti(PA_0);
jack1930 0:86d0148c14a6 21
jack1930 0:86d0148c14a6 22 // Blinking rate in milliseconds
jack1930 0:86d0148c14a6 23 #define BLINKING_RATE_MS 50
jack1930 0:86d0148c14a6 24
jack1930 0:86d0148c14a6 25 char getLED_ON_L(int nr)
jack1930 0:86d0148c14a6 26 {
jack1930 0:86d0148c14a6 27 return LED0_ON_L+4*nr;
jack1930 0:86d0148c14a6 28 }
jack1930 0:86d0148c14a6 29
jack1930 0:86d0148c14a6 30 char getLED_ON_H(int nr)
jack1930 0:86d0148c14a6 31 {
jack1930 0:86d0148c14a6 32 return LED0_ON_L+4*nr+1;
jack1930 0:86d0148c14a6 33 }
jack1930 0:86d0148c14a6 34
jack1930 0:86d0148c14a6 35 char getLED_OFF_L(int nr)
jack1930 0:86d0148c14a6 36 {
jack1930 0:86d0148c14a6 37 return LED0_ON_L+4*nr+2;
jack1930 0:86d0148c14a6 38 }
jack1930 0:86d0148c14a6 39
jack1930 0:86d0148c14a6 40 char getLED_OFF_H(int nr)
jack1930 0:86d0148c14a6 41 {
jack1930 0:86d0148c14a6 42 return LED0_ON_L+4*nr+3;
jack1930 0:86d0148c14a6 43 }
jack1930 0:86d0148c14a6 44
jack1930 0:86d0148c14a6 45 void WriteToASpecificRegister(char RegAdr,char Wert)
jack1930 0:86d0148c14a6 46 {
jack1930 0:86d0148c14a6 47 char daten[2];
jack1930 0:86d0148c14a6 48 daten[0]=RegAdr;
jack1930 0:86d0148c14a6 49 daten[1]=Wert;
jack1930 0:86d0148c14a6 50 motorino.write(adresse,daten, 2, 0);
jack1930 0:86d0148c14a6 51 }
jack1930 0:86d0148c14a6 52
jack1930 0:86d0148c14a6 53 void setDutyCycle(float dtc, int lednr)
jack1930 0:86d0148c14a6 54 {
jack1930 0:86d0148c14a6 55 unsigned int on,off;
jack1930 0:86d0148c14a6 56 unsigned char onL,offL,onH,offH;
jack1930 0:86d0148c14a6 57 on=0;
jack1930 0:86d0148c14a6 58 off=4095*dtc/100;
jack1930 0:86d0148c14a6 59 onL=on&0xFF;
jack1930 0:86d0148c14a6 60 onH=on>>8&0xf;
jack1930 0:86d0148c14a6 61 offL=off&0xFF;
jack1930 0:86d0148c14a6 62 offH=off>>8&0xf;
jack1930 0:86d0148c14a6 63 WriteToASpecificRegister(getLED_ON_L(lednr),onL);
jack1930 0:86d0148c14a6 64 WriteToASpecificRegister(getLED_ON_H(lednr),onH);
jack1930 0:86d0148c14a6 65 WriteToASpecificRegister(getLED_OFF_L(lednr),offL);
jack1930 0:86d0148c14a6 66 WriteToASpecificRegister(getLED_OFF_H(lednr),offH);
jack1930 0:86d0148c14a6 67 }
jack1930 0:86d0148c14a6 68
jack1930 0:86d0148c14a6 69 void init()
jack1930 0:86d0148c14a6 70 {
jack1930 0:86d0148c14a6 71 WriteToASpecificRegister(MODE1,SLEEP);
jack1930 0:86d0148c14a6 72 WriteToASpecificRegister(PRE_SCALE,121); //50Hz Wert=Runden(25MHz/4096/50)-1
jack1930 0:86d0148c14a6 73 WriteToASpecificRegister(MODE1,EXTCLK); //Switch to external 25MHz Clock
jack1930 0:86d0148c14a6 74
jack1930 0:86d0148c14a6 75 setDutyCycle(25,0);
jack1930 0:86d0148c14a6 76
jack1930 0:86d0148c14a6 77 }
jack1930 0:86d0148c14a6 78
jack1930 0:86d0148c14a6 79 void servo(float pos,int nr,float start=5, float end=10) //pos 0..180°
jack1930 0:86d0148c14a6 80 {
jack1930 0:86d0148c14a6 81 setDutyCycle(start+(end-start)*pos/180.0,nr);
jack1930 0:86d0148c14a6 82 }
jack1930 0:86d0148c14a6 83
jack1930 0:86d0148c14a6 84 int main()
jack1930 0:86d0148c14a6 85 {
jack1930 0:86d0148c14a6 86 int dtc=0;
jack1930 0:86d0148c14a6 87 // Initialise the digital pin LED1 as an output
jack1930 0:86d0148c14a6 88 DigitalOut led(LED1);
jack1930 0:86d0148c14a6 89 init();
jack1930 0:86d0148c14a6 90 while (true) {
jack1930 0:86d0148c14a6 91 led = !led;
jack1930 0:86d0148c14a6 92 dtc+=1;
jack1930 0:86d0148c14a6 93 if (dtc>180) dtc=0;
jack1930 0:86d0148c14a6 94 servo(poti*180,0);
jack1930 0:86d0148c14a6 95 thread_sleep_for(BLINKING_RATE_MS);
jack1930 0:86d0148c14a6 96 }
jack1930 0:86d0148c14a6 97 }