New project

Dependencies:   mbed TextLCD

Committer:
jasminealice
Date:
Thu Jun 28 15:08:41 2018 +0000
Revision:
31:9d973398554f
Parent:
30:63a8a5cefc6b
Fiiinal!!

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jasminealice 20:32ba0a5f2d02 1 #include "Track.h"
jasminealice 20:32ba0a5f2d02 2
jasminealice 20:32ba0a5f2d02 3 Track::Track () : trackpin(p20), lcd(p22, p21, p23, p24, p25, p26), myled1(LED1)
jasminealice 20:32ba0a5f2d02 4 {
jasminealice 20:32ba0a5f2d02 5 //ctor
jasminealice 20:32ba0a5f2d02 6 address = 0;
jasminealice 20:32ba0a5f2d02 7 inst = 0;
jasminealice 20:32ba0a5f2d02 8 myled1 = 1;
jasminealice 20:32ba0a5f2d02 9 }
jasminealice 20:32ba0a5f2d02 10
jasminealice 20:32ba0a5f2d02 11 Track::~Track()
jasminealice 20:32ba0a5f2d02 12 {
jasminealice 20:32ba0a5f2d02 13 //dtor
jasminealice 20:32ba0a5f2d02 14 }
jasminealice 20:32ba0a5f2d02 15
jasminealice 20:32ba0a5f2d02 16 void Track::DCC_send_command(unsigned int address, unsigned int inst, unsigned int repeat_count)
jasminealice 20:32ba0a5f2d02 17 {
jasminealice 20:32ba0a5f2d02 18 unsigned __int64 command = 0x0000000000000000; // __int64 is the 64-bit integer type
jasminealice 20:32ba0a5f2d02 19 unsigned __int64 temp_command = 0x0000000000000000;
jasminealice 20:32ba0a5f2d02 20 unsigned __int64 prefix = 0x3FFF; // 14 "1" bits needed at start
jasminealice 20:32ba0a5f2d02 21 unsigned int error = 0x00; //error byte
jasminealice 20:32ba0a5f2d02 22 //calculate error detection byte with xor
jasminealice 20:32ba0a5f2d02 23 error = address ^ inst;
jasminealice 20:32ba0a5f2d02 24 //combine packet bits in basic DCC format
jasminealice 20:32ba0a5f2d02 25 command = (prefix<<28)|(address<<19)|(inst<<10)|((error)<<1)|0x01;
jasminealice 20:32ba0a5f2d02 26 //printf("\n\r %llx \n\r",command);
jasminealice 20:32ba0a5f2d02 27 int i=0;
jasminealice 20:32ba0a5f2d02 28 //repeat DCC command lots of times
jasminealice 20:32ba0a5f2d02 29 while(i < repeat_count) {
jasminealice 20:32ba0a5f2d02 30 temp_command = command;
jasminealice 20:32ba0a5f2d02 31 //loops through packet bits encoding and sending out digital pulses for a DCC command
jasminealice 20:32ba0a5f2d02 32 for (int j=0; j<64; j++) {
jasminealice 20:32ba0a5f2d02 33 if((temp_command&0x8000000000000000)==0) { //test packet bit
jasminealice 20:32ba0a5f2d02 34 //send data for a "0" bit
jasminealice 20:32ba0a5f2d02 35 trackpin=0;
jasminealice 20:32ba0a5f2d02 36 wait_us(100);
jasminealice 20:32ba0a5f2d02 37 trackpin=1;
jasminealice 20:32ba0a5f2d02 38 wait_us(100);
jasminealice 20:32ba0a5f2d02 39 } else {
jasminealice 20:32ba0a5f2d02 40 //send data for a "1"bit
jasminealice 20:32ba0a5f2d02 41 trackpin=0;
jasminealice 20:32ba0a5f2d02 42 wait_us(58);
jasminealice 20:32ba0a5f2d02 43 trackpin=1;
jasminealice 20:32ba0a5f2d02 44 wait_us(58);
jasminealice 20:32ba0a5f2d02 45 }
jasminealice 20:32ba0a5f2d02 46 // next bit in packet
jasminealice 20:32ba0a5f2d02 47 temp_command = temp_command<<1;
jasminealice 20:32ba0a5f2d02 48 }
jasminealice 20:32ba0a5f2d02 49 i++;
jasminealice 20:32ba0a5f2d02 50 }
jasminealice 20:32ba0a5f2d02 51 }