als je de piepjes idd even lang wilt dan had je kunnen zeggen


if (   (secondCounter == 70)
    || (secondCounter == 120)
   ) {
      BUZZER_ON();
} else {
   BUZZER_OFF();
}

|| is een OR..

Het voorbeeld wat eric gaf, was idd ook mijn idee om variatie in piep lengte te kunnen maken.

De optie van Eric heb ik gisteren geprobeerd, maar dat is hem niet geworden zeg maar...
ben bang dat ik de code of in het verkeerde bestandje heb gezet of op de verkeerde plaats..... :(

Ga vanmiddag het laatste voorstel proberen !

post je code anders eens, niet de hoop te snel opgeven.
die opzet die eric gaf moet je eigenlijk wel gebruiken als je kort en lang piepje wil.

voeg bovenaan in main.c het volgende toe:



#define PROCESSOR_SPEED (8000000) (stond er al)

//buzzer 2000ms is 2 sec aan elke 120 seconden
#define BUZZ_ON_TIME_LONG_IN_MS (2000)
//buzzer 1000ms is 1 sec aan elke 70 seconden
#define BUZZ_ON_TIME_SHORT_IN_MS (1000)

en dan moet onderaan in main.c de ISR functie zo worden:


ISR (TIMER1_COMPA_vect ) {
	//deze funtie wordt elke 1ms aangeroepen
	//met deze frequentie worden de displays gescant
	static uint8_t dispCount = 0;
	static uint16_t msCounter = 0;
	static uint16_t msCountBuzzOn = 0; //teller die gezet wordt als de buzzer aan moet

	ShowDigit(time[dispCount], dispCount);
	if (dispCount < 2) {
		dispCount++;
	} else {
		dispCount = 0;
	}

	if (msCountBuzzOn) {			
		msCountBuzzOn--;
		BUZZER_ON();
	} else {
		BUZZER_OFF();
	}

	//na 1000x wordt er 1 seconde bij opgeteld en een vlag gezet zodat de main, de digits kan bepalen
	if (++msCounter > 999) {
		msCounter = 0;
		if (secondCounter < 120) {
			secondCounter++;
		} else {
			secondCounter = 1;

		}
		//buzzer aan als secondCounter gelijk is aan 120
		if (secondCounter == 120) {
			msCountBuzzOn = BUZZ_ON_TIME_LONG_IN_MS;
		}

		if (secondCounter == 70) {
			msCountBuzeeOn = BUZZ_ON_TIME_SHORT_IN_MS;
		}
		
		
		updateTimeArray = 1;
	
	}
}

[Bericht gewijzigd door Stijnos op (83%)]

Ik had de tekst van Ericp zo toegevoeggd :


	//na 1000x wordt er 1 seconde bij opgeteld en een vlag gezet zodat de main, de digits kan bepalen
	if (++msCounter > 999) {
		msCounter = 0;
		if (secondCounter < 120) {
			secondCounter++;
		} else {
			secondCounter = 1;

if (0!=buzzcount)
{
	Buzzer_ON();
	buzzcount--;
	}
	else
	{
	BUZZER_OFF();

	if (70==secondcounter)
	{
	buzzcounter=200;
	}
	if (120=secondcounter)
	{
	buzzcounter=500;
	}

		}
		updateTimeArray = 1;
	
	}
}

Nu de jouwe overgenomen, eens kijken of dat lukt !!
(zag trouwens niet letterlijk #define PROCESSOR_SPEED (8000000) staan in de main.c ??!!

Ik geloof niet dat 'ie het leuk vindt ???!!!

http://www.mesa.nu/images/screen.jpg

[Bericht gewijzigd door Henry S. op (8%)]

Ik zie geen declaratie van buzzcounter.
Ik zie een enkele = in een compare.
Ik mis een } achter de buzzer off.

Verder loop je nogal te hannessen met upper / lower case. C is case-sensitive. Zorg dus dat dat klopt.

Voor wat betreft die processor speeds: weet niet hoe stijnos dat gedaan heeft, maar het is gebruikelijk om dat in je project settings te doen. Komt in je code dan terug als een F_CPU macro. Make file zal 'm er wel aan de compiler mee geven.

Tenslotte Peter... Je zou ook eens de moeite kunnen nemen om je er *iets* in te verdiepen. Ik lees alleen maar 'doet het niet' zonder dat je wat moeite neemt om uit te zoeken wat 'het niet doet' en waarom niet. De stukjes source die ik je gegeven heb (echt geen rocket science), kun je zo in de code van stijnos van 2 pagina's terug copy-pasten. Daar hoef je niks voor te doen. Als die compiler dan een keer barft, zou je eens kunnen kijken op welke regel en wat daar staat. Aardige kans dat je zelf een typo hebt gemaakt. Een beetje hulp aan iemand die zelf ook eens wat probeert maar erg onervaren is gaat hier prima lukken, maar het begint zo zachtjes aan een beetje op project ontwikkeling te lijken. Doe ik ook, maar dan tegen uurtarief :)

Nou daar zou ik ook mee geholpen zijn EricP...
Weet niet wat je uurtarief is ??? Maar ik neem aan dat jij mijn wensen in die code in een half uurtje wel voor mekaar hebt... Maar dan moet ik dat eerst aan Stijnos voorleggen.. die heeft immers deze software gemaakt !

Ik wil namelijk niets liever (nou da's ook niet helemaal waar....) dan dit zelf onder de knie hebben, maar ben er kortweg gewoon nog niet aan toe gekomen om me er nog meer in te verdiepen...
Heb het grote AVR boek als kerst kadootje onder de boom liggen, dus hoop er dan meer tijd voor te hebben.. maar om nog zo lang met deze counter te moeten wachten.... (hoop met de kerst wel de printjes te kunnen solderen :) )

Voor wat betreft die code: daar heb je echt geen boek voor nodig. Er zijn meer C tutorials dan jij tussen nu en kerst kunt lezen... Beetje spelen met C op een PC is heel leerzaam. Doe geen C++. Da's niks voor controllers (en je hebt niet zoveel aan het geleerde).
Buiten dat: je hebt geen tutorial nodig om goed te kijken wat er gebeurt. Die compiler vertelt je meestal best goed waar het ding over struikelt... Snap je het niet: copy-paste error eens in scroogle. Krijg je zomaar 20+ hits van mensen die het ook al eens geprobeerd hebben...

Eh... Printjes solderen? Zou je niet eerst op zoek gaan naar een passende casing? Je componenten scoren en dan pas je PCB maken? Of ga je ze allemaal op gaatjesprint knutselen, daarna een net niet passende casing zoeken en het daar dan ook maar weer in knutselen?

Voor wat uurtarief betreft: 'even code wijzigen' werkt niet zo. Maar dat snap je zelf ook wel... Buiten dat: de wijzigingen heb je al...

hmmm uurtarief? dat hanteert Stijnos normaal ook. Daar is mijn code natuurlijk niet voor gemaakt.;)

Behalve als de kudo's jou kant op komen toch Stijnos ???

Maar jullie hebben natuurlijk wel gelijk. Ik zou me ook best wat meer willen en kunnen verdiepen in de materie. Maar de tijd ontbreekt me deze maanden gewoonweg. In het begin van de post had ik natuurlijk al gezegd dat ik met deze vorm van programmeren niet bekend was, en ben daarom errug blij dat jullie me al zover geholpen hebben !!! Ik vind het echt geweldig wat er allemaal kan met nog minder dan een handje onderdeeltjes....

Natuurlijk ook leuk dat de projectleider erg enthousiast is... Daar ging het tenslotte allemaal om...
Wel jammer dat er dan toch nog wat aanpassingen gedaan 'moeten' worden... waar ik helaas niet echt uit kom.. Het blijkt in C erg belangrijk te zijn dat er met kleine en grote letters wordt gewerkt, tabs, precies genoeg } .. en dat lijkt me de basis die ik het beste uit een boek of cursus kan halen (geven jullie die ook niet trouwens ??) ...

Als ik weer een reanimatie doe erger ik me weer aan het huidige LCD klokje dat als noodgreep voor 3 euro werd gekocht omdat er niets beters voor handen was... En denk dan aan het klokje dat er hopelijk ooit een keer komt waar wel alles mee kan en opzit wat we nodig hebben....

En natuurlijk zit ik niet met de kerst te solderen (of de onderdelen leverancier moet snel zijn en het ideale kastje tevoorschijn toveren...) (trouwens moet met kerst werken dit jaar !!)
Maar het zou ook erg jammer zijn als het pas volgend jaar kerst wordt....

Kortom, zou ik jou Stijnos nog een keertje mogen vragen naar de code te kijken ????
Dan zou je niet alleen mij maar ook mijn werkgever weer erg blij maken !!
(kan ik je trouwens ook een PM sturen, is het mail adres in je profiel in gebruik ??)

Op 30 november 2010 09:31:41 schreef Peter494:
[...]
Natuurlijk ook leuk dat de projectleider erg enthousiast is... Daar ging het tenslotte allemaal om...

Wat heeft die man toch een mazzel dat iemand zich bekommert om enthousiast zijn (of niet) ;)

Wel jammer dat er dan toch nog wat aanpassingen gedaan 'moeten' worden... waar ik helaas niet echt uit kom.. Het blijkt in C erg belangrijk te zijn dat er met kleine en grote letters wordt gewerkt, tabs, precies genoeg }

Copy-paste vanaf hier...

en dat lijkt me de basis die ik het beste uit een boek of cursus kan halen (geven jullie die ook niet trouwens ??) ...

Nope. Ooit zelf wel eens een cursus van een toenmalige werkgever gekregen... Zonde van de tijd geweest (maar heb er wel vreselijk gelachen!). Devies: vooral doen... Ohja... ook eens code van een ander door spitten en snappen - hetgeen stijnos je gebracht heeft is daar een heel mooi voorbeeld voor.

Ha Bram,

Helaas niet goed genoeg om een wereld in te stappen waar ik nog niet veel ervaring in heb.
Het ziet er wel uit alsof dit een ideaal start medium is !!!
Zulke mooie site's ben ik het Nederlands helaas nog niet tegengekomen.

En met de Google translater blijft er niet veel duidelijks over...

Beste Mensen,

Het is inmiddels gelukt 2 piepjes te hebben.. 1 op 70 sec. en de ander op 200 sec. In de code van EricP was de 200 niet 200 ms, maar seconden. Terugbrengen tot 1 sec. gaat prima, maar minder lukt niet... Heb hem nu even op 1 piepje van 1 sec en 1piepje van 2 sec gezet maar zou liever een piepje van 1/2 sec. en een van 1 sec. hebben...

De code van Stijnos geeft wat errors. Heb er 5 van op kunnen lossen, maar er blijven er 2 over.. die ik ook met behulp van google niet op kan lossen... ???

/************************************************
* Project: 120 seconde teller *
* File name: 7segments.c *
* By: Stijn Maes *
* Created: 20-10-2010 *
* Last revision: 11-11-2010 *
* *
*************************************************/

/*
*******************
* INCLUDE FILES *
*******************
*/
#include <avr/io.h>
#include <stdint.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include "7segments.h"

/*
******************************
* STATIC VARS *
******************************
*/

static volatile uint8_t secondCounter = 0;
static volatile uint8_t time[3];
static volatile uint8_t updateTimeArray = 0;

/*
******************************
* STATIC FUNCTIONS *
******************************
*/
static void InitIO (void) {
//in deze functie worden de I/O pinnen gedefinieerd.
//voor het gemak zetten we ze allemaal op output en maken ze initieel laag.
//port B
DDRB = 0xFF;
PORTB = 0;
//port D
DDRD = 0xFF;
PORTD = 0;
}

static void InitTimer (void) {
//hier stellen we timer 1 correct in
//voor een 8Mhz kristal nemen we een prescaler van 8
//met een compare waarde van 1000 tikken hebben we dan precies 1mS
//bij een 4Mhz kristal zal de compare worden 500 tikken worden

TCCR1A = 0;
TCCR1B = ( (1<<WGM12) | (1<<CS11) );
OCR1A = PROCESSOR_SPEED/8000;
TIMSK |= (1<<OCIE1A);
}

//buzzer 2000ms is 2 sec aan elke 120 seconden
#define BUZZ_ON_TIME_LONG_IN_MS (2000)
//buzzer 1000ms is 1 sec aan elke 70 seconden
#define BUZZ_ON_TIME_SHORT_IN_MS (1000)

int main(void){
//disable interrupts
cli();
InitIO();
InitTimer();
//enable interrupts
sei();
while (1) {
if (updateTimeArray) {
updateTimeArray = 0;
//hier worden de secondes omgezet in 3 digits dit minuten/10 seconden en seconden tonen
time[0] = secondCounter / 60;
time[1] = (secondCounter % 60) / 10;
time[2] = secondCounter % 10;
}
}

}

/*
******************************
* INTERRUPT FUNCTIONS *
******************************
*/

ISR (TIMER1_COMPA_vect ) {
//deze funtie wordt elke 1ms aangeroepen
//met deze frequentie worden de displays gescant
static uint8_t dispCount = 0;
static uint16_t msCounter = 0;

ShowDigit(time[dispCount], dispCount);
if (dispCount < 2) {
dispCount++;
} else {
dispCount = 0;
}

//na 1000x wordt er 1 seconde bij opgeteld en een vlag gezet zodat de main, de digits kan bepalen
if (++msCounter > 999) {
msCounter = 0;
if (secondCounter < 120) {
secondCounter++;
} else {
secondCounter = 1;

}
//buzzer aan als secondCounter gelijk is aan 120
ISR (TIMER1_COMPA_vect ) {
//deze funtie wordt elke 1ms aangeroepen
//met deze frequentie worden de displays gescant
static uint8_t dispCount = 0;
static uint16_t msCounter = 0;
static uint16_t msCountBuzzOn = 0; //teller die gezet wordt als de buzzer aan moet

ShowDigit(time[dispCount], dispCount);
if (dispCount < 2) {
dispCount++;
} else {
dispCount = 0;
}

if (msCountBuzzOn) {
msCountBuzzOn--;
BUZZER_ON();
} else {
BUZZER_OFF();
}

//na 1000x wordt er 1 seconde bij opgeteld en een vlag gezet zodat de main, de digits kan bepalen
if (++msCounter > 999) {
msCounter = 0;
if (secondCounter < 120) {
secondCounter++;
} else {
secondCounter = 1;

}
//buzzer aan als secondCounter gelijk is aan 120
if (secondCounter == 120) {
msCountBuzzOn = BUZZ_ON_TIME_LONG_IN_MS;
}

if (secondCounter == 70) {
msCountBuzzOn = BUZZ_ON_TIME_SHORT_IN_MS;
}
}

}
updateTimeArray = 1;

}
}

en de errors zijn :

Build started 2.12.2010 at 15:14:03
../main.c: In function '__vector_4':
../main.c:125: error: redefinition of '__vector_4'
../main.c:102: error: previous definition of '__vector_4' was here
make: *** [main.o] Error 1
Build failed with 2 errors and 0 warnings...

iemand een idee ???

pfffffff
je hebt 2x hetzelfde geplakt, mijn voorbeeld wat ik gaf was wat ik toegevoegd had aan de ISR functie.

als je dit stuk nou weg pleurt zal t al veel beter zijn:
ISR (TIMER1_COMPA_vect ) {
//deze funtie wordt elke 1ms aangeroepen
//met deze frequentie worden de displays gescant
static uint8_t dispCount = 0;
static uint16_t msCounter = 0;

ShowDigit(time[dispCount], dispCount);
if (dispCount < 2) {
dispCount++;
} else {
dispCount = 0;
}

//na 1000x wordt er 1 seconde bij opgeteld en een vlag gezet zodat de main, de digits kan bepalen
if (++msCounter > 999) {
msCounter = 0;
if (secondCounter < 120) {
secondCounter++;
} else {
secondCounter = 1;

}
//buzzer aan als secondCounter gelijk is aan 120

zet je geposte code voortaan tussen "[@code=c]" en "[@/code]" dan is het wat leesbaarder (de @ weghalen, maar anders kan het niet typen ;))


/************************************************
* Project: 120 seconde teller *
* File name: 7segments.c *
* By: Stijn Maes *
* Created: 20-10-2010 *
* Last revision: 11-11-2010 *
* *
*************************************************/


/*
*******************
* INCLUDE FILES *
*******************
*/
#include <avr/io.h>
#include <stdint.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include "7segments.h"





/*
******************************
* STATIC VARS *
******************************
*/


static volatile uint8_t secondCounter = 0;
static volatile uint8_t time[3];
static volatile uint8_t updateTimeArray = 0;


/*
******************************
* STATIC FUNCTIONS *
******************************
*/
static void InitIO (void) {
//in deze functie worden de I/O pinnen gedefinieerd.
//voor het gemak zetten we ze allemaal op output en maken ze initieel laag.
//port B
DDRB = 0xFF;
PORTB = 0;
//port D
DDRD = 0xFF;
PORTD = 0;
}

static void InitTimer (void) {
//hier stellen we timer 1 correct in
//voor een 8Mhz kristal nemen we een prescaler van 8
//met een compare waarde van 1000 tikken hebben we dan precies 1mS
//bij een 4Mhz kristal zal de compare worden 500 tikken worden

TCCR1A = 0;
TCCR1B = ( (1<<WGM12) | (1<<CS11) );
OCR1A = PROCESSOR_SPEED/8000;
TIMSK |= (1<<OCIE1A);
}


//buzzer 2000ms is 2 sec aan elke 120 seconden
#define BUZZ_ON_TIME_LONG_IN_MS (2000)
//buzzer 1000ms is 1 sec aan elke 70 seconden
#define BUZZ_ON_TIME_SHORT_IN_MS (1000)



int main(void){
//disable interrupts
cli();
InitIO();
InitTimer();
//enable interrupts
sei();
while (1) {
if (updateTimeArray) {
updateTimeArray = 0;
//hier worden de secondes omgezet in 3 digits dit minuten/10 seconden en seconden tonen
time[0] = secondCounter / 60;
time[1] = (secondCounter % 60) / 10;
time[2] = secondCounter % 10;
}
}
}

/*
******************************
* INTERRUPT FUNCTIONS *
******************************
*/

ISR (TIMER1_COMPA_vect ) {
//deze funtie wordt elke 1ms aangeroepen
//met deze frequentie worden de displays gescant
static uint8_t dispCount = 0;
static uint16_t msCounter = 0;

ShowDigit(time[dispCount], dispCount);
if (dispCount < 2) {
dispCount++;
} else {
dispCount = 0;
}

//na 1000x wordt er 1 seconde bij opgeteld en een vlag gezet zodat de main, de digits kan bepalen
if (++msCounter > 999) {
msCounter = 0;
if (secondCounter < 120) {
secondCounter++;
} else {
secondCounter = 1;

}
//buzzer aan als secondCounter gelijk is aan 120
if (secondCounter == 120) {
msCountBuzzOn = BUZZ_ON_TIME_LONG_IN_MS;
}

if (secondCounter == 70) {
msCountBuzzOn = BUZZ_ON_TIME_SHORT_IN_MS;
}
}
updateTimeArray = 1;

}

Ziet er inderdaad een stuk beter uit :) dubbele tekst weggehaald...
echter :

Build started 2.12.2010 at 16:28:20
../main.c: In function '__vector_4':
../main.c:122: error: 'msCountBuzzOn' undeclared (first use in this function)
../main.c:122: error: (Each undeclared identifier is reported only once
../main.c:122: error: for each function it appears in.)
make: *** [main.o] Error 1
Build failed with 3 errors and 0 warnings...

die vector 4 is hardnekkig :(

Op 2 december 2010 16:30:09 schreef Peter494:


/************************************************
* Project: 120 seconde teller *
* File name: 7segments.c *
* By: Stijn Maes *
* Created: 20-10-2010 *
* Last revision: 11-11-2010 *
* *
*************************************************/


/*
*******************
* INCLUDE FILES *
*******************
*/
#include <avr/io.h>
#include <stdint.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include "7segments.h"





/*
******************************
* STATIC VARS *
******************************
*/


static volatile uint8_t secondCounter = 0;
static volatile uint8_t time[3];
static volatile uint8_t updateTimeArray = 0;


/*
******************************
* STATIC FUNCTIONS *
******************************
*/
static void InitIO (void) {
//in deze functie worden de I/O pinnen gedefinieerd.
//voor het gemak zetten we ze allemaal op output en maken ze initieel laag.
//port B
DDRB = 0xFF;
PORTB = 0;
//port D
DDRD = 0xFF;
PORTD = 0;
}

static void InitTimer (void) {
//hier stellen we timer 1 correct in
//voor een 8Mhz kristal nemen we een prescaler van 8
//met een compare waarde van 1000 tikken hebben we dan precies 1mS
//bij een 4Mhz kristal zal de compare worden 500 tikken worden

TCCR1A = 0;
TCCR1B = ( (1<<WGM12) | (1<<CS11) );
OCR1A = PROCESSOR_SPEED/8000;
TIMSK |= (1<<OCIE1A);
}


//buzzer 2000ms is 2 sec aan elke 120 seconden
#define BUZZ_ON_TIME_LONG_IN_MS (2000)
//buzzer 1000ms is 1 sec aan elke 70 seconden
#define BUZZ_ON_TIME_SHORT_IN_MS (1000)



int main(void){
//disable interrupts
cli();
InitIO();
InitTimer();
//enable interrupts
sei();
while (1) {
if (updateTimeArray) {
updateTimeArray = 0;
//hier worden de secondes omgezet in 3 digits dit minuten/10 seconden en seconden tonen
time[0] = secondCounter / 60;
time[1] = (secondCounter % 60) / 10;
time[2] = secondCounter % 10;
}
}
}

/*
******************************
* INTERRUPT FUNCTIONS *
******************************
*/

ISR (TIMER1_COMPA_vect ) {
//deze funtie wordt elke 1ms aangeroepen
//met deze frequentie worden de displays gescant
static uint8_t dispCount = 0;
static uint16_t msCounter = 0;

ShowDigit(time[dispCount], dispCount);
if (dispCount < 2) {
dispCount++;
} else {
dispCount = 0;
}

//na 1000x wordt er 1 seconde bij opgeteld en een vlag gezet zodat de main, de digits kan bepalen
if (++msCounter > 999) {
msCounter = 0;
if (secondCounter < 120) {
secondCounter++;
} else {
secondCounter = 1;

}
//buzzer aan als secondCounter gelijk is aan 120
if (secondCounter == 120) {
msCountBuzzOn = BUZZ_ON_TIME_LONG_IN_MS;
}

if (secondCounter == 70) {
msCountBuzzOn = BUZZ_ON_TIME_SHORT_IN_MS;
}
}
updateTimeArray = 1;

}

Op 2 december 2010 15:20:27 schreef Peter494:
[...]
In de code van EricP was de 200 niet 200 ms, maar seconden.

Laten we het er op houden dat je niet gelezen hebt wat er staat en dat je op het verkeerde plekje hebt zitten copy-pasten, goed?

Die foutmelding: exact wat er staat... Waar staat je declaration dan? Ik zie 'm niet staan... (en eh... ook die had ik je al meegegeven... ook alleen copy-pasten)

Beste Eric,
Toch aardig dat je nog reageert !
Ik ben er de hele middag mee bezig geweest.. knippen, plakken, googlen, opnieuw proberen, } weg, } erbij..

- Waarom zou ik iets niet gelezen hebben ??
- Waarom heb ik het op een verkeerde plek ge copy-paste ??

Is dat dan de declaration ??

volatile unsigned int buzzCounter=0;

En waar zou die dan moeten staan ??

komt het er dan op neer dat ik jou code en dat van stijnos moet combineren ???

Op 2 december 2010 17:06:43 schreef Peter494:
Beste Eric,
Toch aardig dat je nog reageert !
Ik ben er de hele middag mee bezig geweest.. knippen, plakken, googlen, opnieuw proberen, } weg, } erbij..

Dat is gokken... Lees nou eens 10 regels C code en kijk heel even hoe de structuur in elkaar zit... In heel de middag had je wel een paar tutorials kunnen doen... :(

- Waarom zou ik iets niet gelezen hebben ??

Omdat je in het stuk wat per seconde runt hebt zitten plakken en niet zoals in het commentaar wat erbij stond in de routine die elke mS draait...

- Waarom heb ik het op een verkeerde plek ge copy-paste ??

Waarom je dat gedaan hebt, weet ik niet. Dat je het gedaan hebt baseer ik op het feit dat het anders gewerkt had zoals aangegeven, nl. tijd in mS...

Is dat dan de declaration ??

volatile unsigned int buzzCounter=0;

Ja. Ik tik net 'C declaration' in bij scroogle... Eerste 3 hits zijn bruikbaar.

En waar zou die dan moeten staan ??

Eh... bij de andere declarations? OK, stijnos gebruikt uint16. Komt op hetzelfde neer als een unsigned int alhier. Voordeel van zijn declaratie is dat je ongeacht op welk platform je bouwt je een 16-bit ding krijgt (en dat kan met een unsigned int wel eens anders zijn...). Maakt in deze context niet uit.

komt het er dan op neer dat ik jou code en dat van stijnos moet combineren ???

Hetgeen ik je gegeven heb, had je kunnen combineren met de code van een pagina ervoor, zoals ik dat ook omschreven heb. Wat je nu hebt weet ik echt niet meer...

[frustratie mode]En eh... met alle respect, maar... heb er ook steeds minder zin in om er op deze manier tijd in te steken. Neem nou eens de moeite om de meest basic tutorial, how-to, whatever te lezen, en daarmee simpele code onder de knie te krijgen of in elk geval te kunnen lezen (zelf verzinnen komt dan wel een keer). En dan doel ik niet op functies met variabel aantal parameters, function pointers, unions, vage macro's ander (soms best ingewikkeld) spul. Gewoon een 'hello world' in C begrijpen zeg maar. Een tellertje wat van 1 tot 10 telt snappen... Daar is toch zat over te vinden!?
Ik heb steeds meer het idee dat je dat spul van stijnos als iets magisch beschouwt zonder echt eens gekeken te hebben wat er staat. Schiet niet op zo. Net zo min als ICs als volledig 'back box' beschouwen zonder ook maar enig idee te hebben over hoe een I/O port zich gedraagt.[/frustratie mode]

Wellicht is stijnos nog bereid om dat project nog een keer aan te passen en nog een keer te posten... Belooft nog wat voor de auto-off... :+

Wat een gekriebel om je frustratie's te lezen Eric !

Maarrre ik begrijp je frustratie's natuurlijk wel... het mooiste zou zijn als je iemand een idee geeft en diegene dat gelijk begrijpt en uitvoert. Maar... zoals ik in het begin al heb aangegeven heb ik nog nooit eerder iets, maar dan ook iets in C gedaan. Vroeger wel wat in Basic (op de commodore 64) maar da's ook al een paar dagen terug...

Met jullie hulp dacht ik een heel eind te komen, maar dat valt nog niet mee..... Voor jullie is het gesneden koek, maar dat is het couperen van morfine met een antidotum als narcan voor mij ook...
Dat Adrenaline de contractie kracht van het myocard versterkt vanwege de perifere vasoconstrictie, hoef ik jou natuurlijk ook niet uit te leggen......

Achteraf gezien had ik er misschien op deze basis niet aan moeten beginnen, maar door de eerste enthousiaste reactie's van jullie, werd ik dat natuurlijk ook !!!
(komt allemaal wel goed !)

Resultaat is nu dat ik natuurlijk de basis van het klokje heb laten zien en de vraag naar meer komt...
En die kan ik niet meer beantwoorden...

helaas....

Op 2 december 2010 17:54:17 schreef Peter494:
Wat een gekriebel om je frustratie's te lezen Eric !

Vond het nou ook weer niet nodig om het van de daken te schreeuwen, maar wilde het wel even kwijt :)

Maarrre ik begrijp je frustratie's natuurlijk wel... het mooiste zou zijn als je iemand een idee geeft en diegene dat gelijk begrijpt en uitvoert. Maar... zoals ik in het begin al heb aangegeven heb ik nog nooit eerder iets, maar dan ook iets in C gedaan. Vroeger wel wat in Basic (op de commodore 64) maar da's ook al een paar dagen terug...

Met jullie hulp dacht ik een heel eind te komen, maar dat valt nog niet mee..... Voor jullie is het gesneden koek, maar dat is het couperen van morfine met een antidotum als narcan voor mij ook...
Dat Adrenaline de contractie kracht van het myocard versterkt vanwege de perifere vasoconstrictie, hoef ik jou natuurlijk ook niet uit te leggen......

Nee, dat heeft iemand anders al eens voor je gedaan. Als ik het mij goed herinner is narcan een vorm van Naloxon ('geen gelul, 1 ampul'... kan het me nog best herinneren :) bij voorkeur iv, desnoods im toedienen als ik het wel heb) en doet het het ook tegen heroine en soortgelijke meuk. Maar je hebt natuurlijk wel gelijk dat het beter is als ik van patiënten af blijf (in het belang van de patiënt wel te verstaan... Alhoewel ik nog ergens een papiertje heb wat nog niet verlopen is en zegt dat ik het moet weten... Nou ja, andere discussie...)

Achteraf gezien had ik er misschien op deze basis niet aan moeten beginnen, maar door de eerste enthousiaste reactie's van jullie, werd ik dat natuurlijk ook !!!
(komt allemaal wel goed !)

Resultaat is nu dat ik natuurlijk de basis van het klokje heb laten zien en de vraag naar meer komt...
En die kan ik niet meer beantwoorden...

helaas....

Ok, dan maar een keer recht voor z'n raap (en niet om je af te zeiken, maar ik heb het idee dat mijn boodschap niet overkomt... dus dit is het laatste wat ik er over zeg, anders wordt het erg offtopic). Wat mij erg van je tegen valt is je eigen initiatief in deze. Noem het gebrek aan zelfstudie. Niemand verwacht 'rocket science', maar... Ik heb zo zachtjes aan een beetje het gevoel dat de verhouding 'input van hier' tov. 'input van jou' erg scheef begint te liggen. IMHO kun je daar wat aan doen door er een klein beetje studie aan te besteden. Ofwel: probeer te snappen hoe het werkt en niet alleen 'aap doet kunstje na'. Dat heet productontwikkeling-met-handicaps (voor de mensen hier wel te verstaan). En dat is wat heel anders dan een beginnend knutselaar zo nu en dan eens met zijn neus de goede kant op zetten.
Om terug te komen op je voorbeeld met medicijnen: ik moet daar ook het nodige over weten (nee, het is niet mijn werk, maar een beetje kennis wordt wel verwacht). De docent was daar heel simpel in: korte inleiding voor een bepaalde groep medicijnen en dan: volgende keer wordt je geacht te weten wat deze medicijnen doen, hoe ze werken en hoe je ze toedient. Volgende week: Vragen? OK, dit zijn bij deze medicijnen de instinkers. Nog meer vragen? Nee, mooi, volgend onderwerp. Daarna examen. Hoe je aan die info kwam? Bieb? Internet? Boek? die insteek mis ik bij jou...

Goed, dan voor je probleem: ik gok erop dat stijnos die code nog wel een keer voor je aanpast. Echter, ik voorzie nog wel wat meer hobbels met oa. die auto-off. Is allemaal niet zo moeilijk, maar op het niveau 'kan iemand het schema tekenen en de software voor me maken, dan bouw ik het wel en maak een goede beurt bij de baas' gaat het vrees ik niet werken. Zo enthousiast zijn de mensen hier doorgaans ook weer niet :) (maar wellicht heb je een keer mazzel...). Ik zie 3 mogelijkheden voor je:

  • Je er toch zelf meer in verdiepen. En er zijn hier altijd wel mensen die op een gerichte vraag een antwoord hebben.
  • Een aantal features afschieten (sorry baas, ik kom er niet uit)
  • Het laten maken (baas, ze kosten zoveel per stuk. Is dat goed?)

De eerste heeft mijn voorkeur, al is het maar omdat jij er dan ook wijzer van wordt (en niet alleen je werkgever die voor een sch**tprijs een stuk apparatuur in handen krijgt wat blijkbaar erg handig is). Maar ja, de keus is aan jou...
Bedenk wel dat als het ding eenmaal loopt je ook nog het traject van casing, PCB, parts, in elkaar zetten, manual schrijven enzo krijgt. De ervaring leert dat dat best tijdrovend kan zijn (en ik vrees dat ook daar niemand het voor je gaat regelen...). Voor de 3de mogelijkheid: ik ga het niet doen (al genoeg te doen), echter, kan je wellicht wel aan iemand helpen die dat wel kan. Maar ja, da's niet voor niets, zoals stijnos dat ook al schreef (die kan dat vast ook wel).

Voorstel: ga vanavond lekker op de bank hangen (of moet je werken?), gooi dat ding in de hoek en neem na het weekend eens wat tijd om wat basis C (ofzo, en vergeet daar het stuk over printf. Is voor jou absoluut nog niet interessant tenzij je op je PC wat wilt gaan spelen) te leren. Dan weet je daarna wat een { en een } voor nut hebben, wat een variabele is en hoe een declaratie in elkaar zit. Met een beetje mazzel ook nog wat over de scope van een variabele. Ik denk dat dan 80% van je probleem mbt. code is opgelost.

(en dat is echt het laatste wat ik er over zeg... terug on-topic. ofzo)

Eric,

het gaat alleen om de software, het traject van casing, PCB, parts, in elkaar zetten, manual schrijven enzo
lukt inderdaad zelf wel...

Bedankt voor je advies, en zal ook voor optie 1 kiezen. Heb van de week het boek AVR van Elektron al besteld, zal morgen wel bezorgt worden, denk ik...
Jammer genoeg wordt het dan wel een project voor de volgende kerst en niet zoals ik gehoopt had, voor deze kerst....

En eh... Voor de kerst ga je niet meer redden. Alleen al het maken van PCBs kost een week of wat. En dan heb je nog geen ontwerp, want je hebt geen casing. Dus qua doorlooptijd: no way (tenzij je gewoon zegt: het mag geld kosten... spul nu bij Farnell bestellen op een business account, maandag in huis, maandag avond PCB bestellen, heb je voor eind volgende week het spul in huis. Maar dan kost het ook wel wat...)

Staar je niet blind op die AVR icm. C. Net zoiets als verkeersregels: je leert de regels en kunt je dan (als het goed is) zonder al te veel brokken te voet, op de fiets en met de auto door het verkeer begeven. Daar gebruik je een subset van de regels voor. Als je alleen leert lopen en alleen de regels leert die voor lopen van belang zijn, ga je nat als je eens op een fiets stapt (ofwel: doe tzt bijvoorbeeld ook dynamic memory management enzo. Handig als je ooit op een AVR met 'veel' RAM over stapt)

Succes. Ik ga even verder vechten met een IP stack die niet helemaal doet wat ik verwacht (en dat ligt vast aan mijn verwachting hoor :) )

@Peter,

Ik begrijp EricP zn standpunt wel maar het jouwe ook. Allereerst mn complimenten dat je in "het diepe" gesprongen bent. Je hebt vantevoren eerlijk aangegeven dat je 0,0 ervaring met deze materie hebt je door "ons" laten "omlullen" om met een AVR aan de slag te gaan (gelukkig , voor t zelfde geld had je voor een PIC gekozen :+ ). Je programmer en ontwikkelomgeving is aan de praat, dus je schoenen heb je, nu nog leren lopen.

Probeer de basisbegrippen van .C onder de knie te krijgen (ik zal nog even meezoeken of ik wat toegankelijk materiaal kan vinden), zoals "C" is "Case Sensitive" ofwel HoOfDlEtTeRgEvOeLig, in "C" moet je een variabele eerst declareren voor je hem kunt gebruiken (is niet het geval in Basic) en nog wat eigenaardigheden.

Krijg je tijdens het compileren 5493 errors, probeer dan consequent eerst de EERSTE error weg te werken, vaak verdwijnen er dan nog een hoop meer.

Zoals EricP asl zei, krijg je een error, plak m eens in Google, vaak zijn er al mensen tegenaan gelopen.

Programmeren is meer dan code kloppen (dat kan iedereen), programmeren is een algoritme bedenken. WAT moet er gebeuren in mijn code, wat-als,.... dat kun je eigenlijk zelfs beter op een kladblok ZONDER computer doen, probeer in je eigen woorden een flowchart te maken wat er moet gebeuren. Als je dat voor elkaar hebt is de bijbehorende code kloppen vaak een eitje.

Loop eens regel voor regel door de code die je hebt gekregen, probeer te beredeneren wat er gebeurt, en als je het niet snapt vraag het hier. Ik denk (sorry als ik voor EricP denk) dat hij dat bedoeld met "zelfwerkzaam".

Kerst ga je inderdaad niet halen, maar begin vast een "stuitervast" kastje uit te zoeken, maak t niet te klein (ik neem aan dat je niet op een cm hoeft te kijken) , selecteer je schakelaars (moet t echt waterdicht zijn ?) , je displays (misschien toch 4 displays overwegen alvast), kijk misschien eens naar Blauwe (lekker helder), zoek je batterijhouder uit (daar willen ze je allemaal hier ook best mee helpen denk ik).

Prul parallel daar aan , lekker aan je software. En dan straks komt fase 2, je print :-).

Just my 2 cents.

Groeten, Bram