Vattna blommorna – del 10

Nu händer det grejer.

Mitt program för min pic känns komplett. Har suttit och debuggat kod nu ikväll och kommit fram till att den lösningen jag postade nu senast inte var den bästa, för att vara helt ärlig.

Bland annat så verkar inte !RA# fungera riktigt i kompilatorn av någon anledning. Koden beter sig konstigt när detta händer. Eller har jag bara programmerat kasst?

Efter lite kodändringar fungerade det!

Koden ser ut såhär nu:

#include <pic16f690.h>

typedef unsigned int word;

word at 0x2007 __CONFIG = (_INTRC_OSC_NOCLKOUT & _CP_OFF & _WDT_OFF & _BOR_OFF & _PWRTE_ON & _MCLRE_OFF & _IESO_OFF & _FCMEN_OFF);
void delay_ms(long ms)
{
    long i;

    while (ms--)
        for (i=0; i<=50; i++) //50 iterations is _basically_ 1 ms.
			;
}
unsigned int pumpint=0; //just an int for loops..
unsigned int totalpumpms = 0; //A counter for how many ms the pump has been running
unsigned static int maxpumpms = 100000; //Change this if you are using a slower/faster pump.
void main () {
  TRISC = 0x00;	/* PORTC, All outputs */
  TRISA = 0x1f; /* RA1-RA4 input, RA>4 output */
  while(1)
  {
    pumpint = 0;
    //Start pumping water, if RA3 isn't activated.
    if(RA3 || totalpumpms >= maxpumpms)
    {
		//Do nothing..
		delay_ms(1);
    }
    else
    {

      while(pumpint < 5000) //Max pumptime is 5 secs.
      {
        if(RA3) //If(ra3) is used since while(ra3) doesn't seem to work as good with sdcc compiler.
        {
          break;
        }
	else if (totalpumpms >= maxpumpms)
	{
		break;
	}
        PORTC=0x0f;
        //As an extra marker, never pump for more than 5 secs.
        delay_ms(1);
		totalpumpms++; //Add to the total pumpmscounter.
        pumpint++; //just for this loop.
      }
	  pumpint = 0;
    }
    //Pumping done. Wait 15 minutes
    PORTC=0x00; //Close all outputs

    //Reset button must work within this time. Don't sleep for a whole 15 mins, but keep polling.
    while(pumpint <= 90000) //15 min == 900000ms. We're polling each 100ms.
    {
      if(RA4) //RA4 is the reset switch
      {
		totalpumpms = 0;
		break;
		//at this point, we have resetted the counter, and let the water start pumping again.
      }
      pumpint++;
      delay_ms(100);
    }
  }
}

För närvarande använder jag Windows 7 (ja, jag vet, det är inte omtyckt, men faktum är att win börjar konkurrera med kde och linux..) och mitt debuggingprogram blev “Real Pic Simulator” som utförde sitt arbete mycket väl! Programmet är dock inte gratis, men en 30-dagars testversion gick att ladda ner. Och mer tid behöver jag nog inte :-).

Som open source entusiast skulle jag kört gpsim som är det naturliga och självklara valet om man tycker om öppen mjukvara men jag tyckte inte att jag hade lust med att mecka conf-filer och tillägg för att få just min pic att stödjas. RPS fick funka ikväll, vilket det gjorde!

Nu kan jag lugnt slappna av resten av kvällen och njuta av mitt arbete :).

Imorgon blir det att kolla nya möbler och liknande, då vår flytt har ändrats från 1:a November till 1:a Oktober/Mitten på September.

Ha en god afton. Själv Njuter jag med lite jamaicansk öl. Det är ju inne med Jamaica nu 🙂
/Marcus

2 thoughts on “Vattna blommorna – del 10”

  1. du asså, på 45:e raden har du nog missat en liten grej. Tänk nu efter…. du vet vad det är!!!!

    🙂

    Ha de fint

Leave a Reply

Your email address will not be published. Required fields are marked *