program Tesa-motortreiber-web;
// geschrieben mit AVRco Pascal von
// Michael Kinz
// www.team-iwan.de
{ $BOOTRST $00C00}         {Reset Jump to $00C00}
{$NOSHADOW}
{ $W+ Warnings}            {Warnings off}

Device = mega8, VCC = 5;

Import SysTick, PWMport1A, PWMport1B, TWIslave;

From System Import;

Define
  ProcClock      = 8000000;        {Hertz}
  SysTick        = 10;             {msec}
  StackSize      = $0064, iData;
  FrameSize      = $0064, iData;
  PWMres1        = 8;              {bits}
  PWMpresc1      = 64;
  TWImode        = Transparent;    {HandShake or Transparen}
  TWIbuffer      = 4, iData;       {buffer/packet size}
  TWIaddr        = 03;             {default slave address}

Implementation

{$IDATA}

{--------------------------------------------------------------}
{ Type Declarations }

type


{--------------------------------------------------------------}
{ Const Declarations }


{--------------------------------------------------------------}
{ Var Declarations }
{$IDATA}
var
  LEDgr[@Portb, 6]     : bit;
  LEDro[@Portb, 7]     : bit;
  pwma           : byte;
  pwmbw          : word;
  pwmb[@pwmbw]   : byte;
  pwmw           : word;
  pwm[@pwmW]     : byte;
  register       : byte;
  DiagA[@Pinb, 4]      : bit;
  DiagB[@Pind, 5]      : bit;
  modus          : byte;
  zaehler        :byte;
  zaehler1        :byte;
{--------------------------------------------------------------}
{ functions }

procedure InitPorts;
begin
  DDRB:=  %11000000;

  PortB:= %00000000;
  DDRB:=  %11001110;
  Portc:= %00000000;
  DDRc:=  %00000000;
  Portd:= %00000000;
  DDRd:=  %00000000;

  // IN A Port15 Port B.3 OC2
  // IN B Port13 Port B.1 OC1A
  // PWM Port14 Port B.2 OC1B
  // En/Diag A  Port16 Port B.4 MISO
  // En/Diag B Port9 Port D.5 T1
end InitPorts;
procedure modus0;
begin
  ocr2 := 0;
  PWMport1A:= 0;
  PWMport1B:= 0;
end modus0;

procedure modus1;
begin
  if (register and %10000000) = 0 then
    ocr2 := 0;
  else
    ocr2 := 255;
  endif;
  if (register and %01000000) = 0 then
    PWMport1A := 0;
  else
    PWMport1A := 255;
  endif;


  PWMport1B:= pwmw;
        if zaehler < pwm then
  LEDgr := 1;
  else
  ledgr := 0;
  endif;

end modus1;
procedure modus2;
begin
  if (register and %10000000) = 0 then
    ocr2 := 0;
  else
    ocr2 := pwm;
  endif;
  if (register and %01000000) = 0 then
    PWMport1A := 0;
  else
    PWMport1A := pwmw;
  endif;


  PWMport1B:= 255;
        if zaehler < pwm then
  LEDgr := 1;
  else
  ledgr := 0;
  endif;
end modus2;
procedure modus3;
begin

end modus3;

{--------------------------------------------------------------}
{ Main Program }
{$IDATA}

begin
  InitPorts;


  EnableInts;

  TCCR2 := %01100100;
  loop
    register := TWIRXBUFFER[0];  //Register lesen
    pwm := TWIRXBUFFER[1];       // die der Master
    modus := TWIRXBUFFER[2];


    if (register and %00000001) = 0 then
      portb.4  := 0;   // Diag Pullup aus
    else
      portb.4 := 1;     // Diag Pullup ein

    endif;
    if (register and %00000010) = 0 then
      portd.5  := 0;     // Diag Pullup aus
    else
      portd.5 := 1;      // Diag Pullup ein
    endif;
    if diaga = false then
      LEDro := 1;
      ocr2 := 0;
      PWMport1A:= 0;
      PWMport1B:= 0;
    endif;
    if diagb = false then
      LEDro := 1;
      ocr2 := 0;
      PWMport1A:= 0;
      PWMport1B:= 0;
    endif;
    if diaga = true then

      if diagb = true then

        LEDro := 0;
      endif;

    endif;

    Case modus of

      1 :
          modus1;
        |
      2 : modus2;
        |


    else
      //ledgr := 0;
      modus0;

    EndCase;



     inc (zaehler);
     if modus = 0 then
     if zaehler = 255 then
     inc (zaehler1);
     endif;
     
     if zaehler1 = 100 then
     toggle (LEDgr);
     zaehler1 := 0;
     endif;
     endif;






//    mdelay(2);

  endloop;
end Tesa-motortreiber-web.
