www.daimi.au.dk/~smunk/dArkOS/uge45
Og et program, som løbende viser de rå værdier fra alle tre indgange:#include "RCX_RTE.h" #define port7_addr 0xffbe #define port7 *((volatile byte *) port7_addr) #define Prgm ! ( port7 & ( 1 << 7 ) ) #define msCount 100 /* A/D converter */ #define byte unsigned char #define word unsigned short int #define ADCR *((volatile byte *) 0xffe9) /* A/D Control Register*/ #define ADCSR *((volatile byte *) 0xffe8) /* A/D Control Status Register*/ #define ADDRA *((volatile word *) 0xffe0) /* A/D Data Register A */ void delay(int16 ms) { int16 i; while( ms > 0){ for(i=0; i > 6) & 0x3ff)); } RCX_Reset(); }
De rå værdier, som blev fundet for de tre typer sensorer:#include "RCX_RTE.h" #define port7_addr 0xffbe #define port7 *((volatile byte *) port7_addr) #define Prgm ! ( port7 & ( 1 << 7 ) ) #define msCount 100 /* A/D converter */ #define byte unsigned char #define word unsigned short int #define ADCR *((volatile byte *) 0xffe9) /* A/D Control Register*/ #define ADCSR *((volatile byte *) 0xffe8) /* A/D Control Status Register*/ #define ADDRA *((volatile word *) 0xffe0) /* A/D Data Register A */ #define ADDRB *((volatile word *) 0xffe2) /* A/D Data Register B */ #define ADDRC *((volatile word *) 0xffe4) /* A/D Data Register C */ void delay(int16 ms) { int16 i; while( ms > 0){ for(i=0; i > 6) & 0x3ff)); delay(8000); lcd_show_int16((int16)( (ADDRB >> 6) & 0x3ff)); delay(8000); lcd_show_int16((int16)( (ADDRC >> 6) & 0x3ff)); } RCX_Reset(); }
Sammenhængen imellem rå værdier og grader Celsius:sensor min værdi max værdi --------------------------------------------------- trykføler 213 1023 lysføler 391 532 temperaturføler 460 725 ----------------------------------------------------
Dette fører til et simpelt digitalt termometer, hvis RCX kører følgende program:rå værdi grader Celsius -------------------------------- V 86-(V/9.4) --------------------------------
Vi har lavet et program(Temp3.c) der viser minimums værdien hvis man trykker på View. Planen var at den skulle skifte mellem min og max, men det virker ikke ordentligt.#include "RCX_RTE.h" #define port7_addr 0xffbe #define port7 *((volatile byte *) port7_addr) #define Prgm ! ( port7 & ( 1 << 7 ) ) #define msCount 100 /* A/D converter */ #define byte unsigned char #define word unsigned short int #define ADCR *((volatile byte *) 0xffe9) /* A/D Control Register*/ #define ADCSR *((volatile byte *) 0xffe8) /* A/D Control Status Register*/ #define ADDRA *((volatile word *) 0xffe0) /* A/D Data Register A */ void delay(int16 ms) { int16 i; while( ms > 0){ for(i=0; i > 6) & 0x3ff))/8)); } RCX_Reset(); }