Script interface (ddcp-script)
digitaldcpower-0.6.4 -- 2010-07-11 added ddcp-script interface
commands for windows.
-digitaldcpower-0.6.5 -- 2011-04-14 There was a fault in the range setting
+digitaldcpower-0.6.5 -- 2012-04-14 There was a fault in the range setting
for the PWM (ICR1L in dac.c). Thanks to Weitao Li (james)
for reporting this. This fault reduced the precision
a bit.
- -- 2011-04-14 some minor improvemnents in main.c and analog.c to
+ -- 2012-04-14 some minor improvemnents in main.c and analog.c to
regulate the voltage drop over the current measuremtns shunts
faster.
+digitaldcpower-0.6.6 -- 2012-07-17 Adapt the code to compile clean with the latest
+ avr-libc (http://www.nongnu.org/avr-libc/changes-1.8.html)
+ prog_char is now depricated.
-------------------------------------------------------------------
vim: set sw=8 ts=8 si et :
</pre>
}
-void lcd_puts_p(const prog_char *progmem_s)
+void lcd_puts_p(const char *progmem_s ) // note this is how you would declare a variable: const char str_pstr[] PROGMEM = "FLASH STRING";
/* print string from program memory on lcd */
{
register char c;
/* if you hard code a string in the program then you need to decalare
* it like: char *str =PSTR("hello world");
* and then use lcd_puts_p(str);*/
-extern void lcd_puts_p(const prog_char *progmem_s); /* print string from program memory on lcd (no auto linefeed) */
+extern void lcd_puts_p(const char *progmem_s ); /* print string from program memory on lcd (no auto linefeed) */
+// lcd_puts_p can be used like this: lcd_puts_p(PSTR("hello"))
extern void lcd_init(void); /* initialize the LCD. Call this once*/
extern void lcd_reset(void);
-/*
-** macros for automatically storing string constant in program memory
-*/
-#ifndef P
-#define P(s) ({static const char c[] __attribute__ ((progmem)) = s;c;})
-#endif
-#define lcd_puts_P(__s) lcd_puts_p(P(__s))
-
#endif //LCD_H
* Clock frequency : Internal clock 8 Mhz
*********************************************/
#include <avr/io.h>
+#include <avr/pgmspace.h>
#include <inttypes.h>
#include <avr/interrupt.h>
#define F_CPU 8000000UL // 8 MHz
#include "hardware_settings.h"
// change this version string when you compile:
-#define SWVERSION "ver: ddcp-0.6.4"
+#define SWVERSION "ver: ddcp-0.6.6"
//#define DEBUGDISP 1
//debug LED:
uartstrpos++;
}
if (uartstrpos>UARTSTRLEN){
- uart_sendstr_P("\r\nERROR\r\n");
+ uart_sendstr_p(PSTR("\r\nERROR\r\n"));
uartstrpos=0; // empty buffer
uartstr[0]='\0'; // just print prompt
uart_has_one_line=1;
}
delay_ms_uartcheck(1); // check for uart without delay
if (changeflag){
- lcd_puts_P("setting stored");
+ lcd_puts_p(PSTR("setting stored"));
eeprom_write_byte((uint8_t *)0x0,19); // magic number
eeprom_write_word((uint16_t *)0x02,set_val[0]);
eeprom_write_word((uint16_t *)0x04,set_val[1]);
}else{
if (bpress> 2){
// display software version after long press
- lcd_puts_P(SWVERSION);
+ lcd_puts_p(PSTR(SWVERSION));
lcd_gotoxy(0,1);
- lcd_puts_P("tuxgraphics.org");
+ lcd_puts_p(PSTR("tuxgraphics.org"));
}else{
- lcd_puts_P("already stored");
+ lcd_puts_p(PSTR("already stored"));
}
}
delay_ms_uartcheck(200);
}
// version
if (uartstr[0]=='v' && uartstr[1]=='e'){
- uart_sendstr_p(P(" "));
- uart_sendstr_p(P(SWVERSION));
- uart_sendstr_p(P("\r\n"));
+ uart_sendstr_p(PSTR(" "));
+ uart_sendstr_p(PSTR(SWVERSION));
+ uart_sendstr_p(PSTR("\r\n"));
cmdok=1;
}
// store
}
// help
if (uartstr[0]=='h' || uartstr[0]=='H'){
- uart_sendstr_p(P(" Usage: u=V*10|i=mA/10|store|help|version\r\n"));
- uart_sendstr_p(P(" Examples:\r\n"));
- uart_sendstr_p(P(" set 6V: u=60\r\n"));
- uart_sendstr_p(P(" max 200mA: i=20\r\n"));
+ uart_sendstr_p(PSTR(" Usage: u=V*10|i=mA/10|store|help|version\r\n"));
+ uart_sendstr_p(PSTR(" Examples:\r\n"));
+ uart_sendstr_p(PSTR(" set 6V: u=60\r\n"));
+ uart_sendstr_p(PSTR(" max 200mA: i=20\r\n"));
cmdok=1;
}
if (uartprint_ok){
cmdok=1;
- uart_sendstr_p(P(" ok\r\n"));
+ uart_sendstr_p(PSTR(" ok\r\n"));
}
if (uartstr[0]!='\0' && cmdok==0){
- uart_sendstr_p(P(" command unknown\r\n"));
+ uart_sendstr_p(PSTR(" command unknown\r\n"));
}
uart_sendchar('#'); // marking char for script interface
int_to_dispstr(measured_val[1],buf,1);
* Clock frequency : Internal clock 8 Mhz
*********************************************/
#include <avr/io.h>
+#include <avr/pgmspace.h>
#include <inttypes.h>
#define F_CPU 8000000UL // 8 MHz
#include <util/delay.h>
delay_ms(500);
delay_ms(500);
lcd_clrscr();
- lcd_puts_P("pause");
+ lcd_puts_p(PSTR("pause"));
while (1) {
if (dac_dir==1){
dac_val++;
if (cnt>1){
lcd_clrscr();
// u+ pressed
- lcd_puts_P("up");
+ lcd_puts_p(PSTR("up"));
dac_dir=1;
LEDOFF;
}
if (cnt<1){
lcd_clrscr();
// u- pressed
- lcd_puts_P("down");
+ lcd_puts_p(PSTR("down"));
dac_dir=-1;
LEDON;
}
if (check_store_button()){
lcd_clrscr();
- lcd_puts_P("pause");
+ lcd_puts_p(PSTR("pause"));
dac_dir=0;
}
delay_ms(100);
if (cnt>1){
lcd_clrscr();
// u+ pressed
- lcd_puts_P("up");
+ lcd_puts_p(PSTR("up"));
dac_dir=1;
LEDOFF;
}
if (cnt<1){
lcd_clrscr();
// u- pressed
- lcd_puts_P("down");
+ lcd_puts_p(PSTR("down"));
dac_dir=-1;
LEDON;
}
if (check_store_button()){
lcd_clrscr();
- lcd_puts_P("pause");
+ lcd_puts_p(PSTR("pause"));
dac_dir=0;
}
delay_ms(100);
* Clock frequency : Internal clock 8 Mhz
*********************************************/
#include <avr/io.h>
+#include <avr/pgmspace.h>
#include <inttypes.h>
#define F_CPU 8000000UL // 8 MHz
#include <util/delay.h>
check_u_button(&cnt);
if (cnt>1){
lcd_clrscr();
- lcd_puts_P("U+ pressed");
+ lcd_puts_p(PSTR("U+ pressed"));
i=0;
}
if (cnt<1){
lcd_clrscr();
- lcd_puts_P("U- pressed");
+ lcd_puts_p(PSTR("U- pressed"));
i=0;
}
cnt=1;
check_i_button(&cnt);
if (cnt>1){
lcd_clrscr();
- lcd_puts_P("I+ pressed");
+ lcd_puts_p(PSTR("I+ pressed"));
i=0;
}
if (cnt<1){
lcd_clrscr();
- lcd_puts_P("I- pressed");
+ lcd_puts_p(PSTR("I- pressed"));
i=0;
}
if (check_store_button()){
lcd_clrscr();
- lcd_puts_P("store");
+ lcd_puts_p(PSTR("store"));
lcd_gotoxy(0,1);
- lcd_puts_P("pressed");
+ lcd_puts_p(PSTR("pressed"));
i=0;
}
delay_ms(10);
if (i>150){
lcd_clrscr();
- lcd_puts_P("press");
+ lcd_puts_p(PSTR("press"));
lcd_gotoxy(0,1);
- lcd_puts_P("a button");
+ lcd_puts_p(PSTR("a button"));
i=0;
}
#include <avr/interrupt.h>
#include <string.h>
#include <avr/io.h>
+#include <avr/pgmspace.h>
#include "uart.h"
#define F_CPU 8000000UL // 8 MHz
}
}
-void uart_sendstr_p(const prog_char *progmem_s)
+void uart_sendstr_p(const char *progmem_s )
// print string from program memory on rs232
{
char c;
***************************************************************************/
#ifndef UART_H
#define UART_H
+#include <avr/io.h>
#include <avr/pgmspace.h>
extern void uart_init(void);
extern unsigned char uart_getchar_isr_noblock(char *returnval); // get a char from buffer if available
extern void uart_sendchar(char c); // blocking, no buffer
extern void uart_sendstr(char *s); // blocking, no buffer
-extern void uart_sendstr_p(const prog_char *progmem_s); // blocking, no buffer
+extern void uart_sendstr_p(const char *progmem_s); // blocking, no buffer
+// uart_sendstr_p can be used like this: uart_sendstr_p(PSTR("my string"));
/*
// you can either use the above _isr functions or one of the
// following two but you can not mix them.
extern void uart_flushRXbuf(void);
*/
-/*
-** macros for automatically storing string constant in program memory
-*/
-#ifndef P
-#define P(s) ({static const char c[] __attribute__ ((progmem)) = s;c;})
-#endif
-#define uart_sendstr_P(__s) uart_sendstr_p(P(__s))
#endif /* UART_H */