Tag Archives: vatten

Vattna blommorna – Del 9

Efter arbetet idag blev det en snabb sväng inom biltema för att köpa en tio-liters hink med lock samt lite slang som kan transportera vatten. Jag passade även på att köpa mig en annan pump på biltema, den som nämnts i ett utav de första inläggen gällande mitt blomsterprojekt.

Alltså:

  • 362772 – Lock till 10L hink 9,90kr
  • 362770 – 10L hink 14,90kr
  • 15331 – Vattenslang 10Mx9mm 36,90
  • 25980 – Pentry-pump 79,90

Totalt: 142,40kr

Efter det bar det hem och testa hur fort jag tömde mina tio liter och resultatet blev prick 100 sekunder att pumpa vattnet till den nivå att den nästan torrkörts.

Detta ger mig lite modifikation i mitt program som ska ligga i PIC:en

#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 */
  TRISA4 = TRUE; /* RA4 input */
  while(1)
  {
    //Start pumping water, if RA3 isn't activated.
    //Wait for the breaking SW1
    if(RA3 == false && totalpumpms < maxpumpms)
    {
      while(1)
      {
        if(RA3) //If(ra3) i used since while(ra3) doesn't seem to work as good with sdcc compiler.
        {
          break;
        }
        PORTC=0x0f;
        //As an extra marker, never pump for more than 5 secs.
        delay_ms(1);
		totalpumpms++; //Add to the total pumpmscounter.
        if(pumpint >= 5000) //Loop until 5000ms == 5secs is reached.
        {
          pumpint = 0;
          break;
        }
        pumpint++;
      }
    }
    //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 10ms.
    {
      if(RA2) //RA2 is the reset switch
      {
		totalpumpms = 0;
        pumpint = 0;
      }
      pumpint++;
      delay_ms(10)
    }
  }
}

Jag har inte verifierat koden än, men jag tror det skall fungera :). Skall testa det imorgon, och i helgen ska jag göra mitt bästa för att bygga ihop den helt!
Jag vill ju ha den klar innan flytten, som förvisso inte är förräns i November, men jag vill gå vidare till mina andra små projekt.

Förresten, har ni någon bra bok ni kan rekommendera om embedded c-programmering. Vad man bör tänka på i minnesvägar och sådär? Jag hade uppskattat lite tips på denna fråga :).

Mvh
Marcus