<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
		<id>https://rn-wissen.de/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Edvpc2</id>
		<title>RN-Wissen.de - Benutzerbeiträge [de]</title>
		<link rel="self" type="application/atom+xml" href="https://rn-wissen.de/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Edvpc2"/>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Spezial:Beitr%C3%A4ge/Edvpc2"/>
		<updated>2026-04-11T20:44:58Z</updated>
		<subtitle>Benutzerbeiträge</subtitle>
		<generator>MediaWiki 1.25.1</generator>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Diskussion:RN-Control_Demoprogramm_in_C&amp;diff=13116</id>
		<title>Diskussion:RN-Control Demoprogramm in C</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Diskussion:RN-Control_Demoprogramm_in_C&amp;diff=13116"/>
				<updated>2008-01-28T12:04:49Z</updated>
		
		<summary type="html">&lt;p&gt;Edvpc2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das Programm erzeugt beim kompilieren mit AVRStudio 4.13.528 Fehler bei den For-Schleifen. Das rührt daher, dass in rncontrol.h Variablen in C++-Manier in den for-Anweisung selbst deklariert werden.&lt;br /&gt;
&lt;br /&gt;
Bsp.:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void sound(uint8_t hoehe, uint16_t laenge)&lt;br /&gt;
{&lt;br /&gt;
	for(uint16_t i=0; i&amp;lt;laenge*15; i=i+(2*hoehe))&lt;br /&gt;
	{&lt;br /&gt;
	setportdon(7);&lt;br /&gt;
	_delay_ms(hoehe);&lt;br /&gt;
	setportdoff(7);&lt;br /&gt;
	_delay_ms(hoehe);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fehler:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;error: 'for' loop initial declaration used outside C99 mode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Werde das jetzt an den relevanten Stellen so ändern :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void sound(uint8_t hoehe, uint16_t laenge)&lt;br /&gt;
{&lt;br /&gt;
        uint16_t i;&lt;br /&gt;
	for(i=0; i&amp;lt;laenge*15; i=i+(2*hoehe))&lt;br /&gt;
	{&lt;br /&gt;
	setportdon(7);&lt;br /&gt;
	_delay_ms(hoehe);&lt;br /&gt;
	setportdoff(7);&lt;br /&gt;
	_delay_ms(hoehe);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wäre schön, wenn es dann zur Sicherheit mal jemand testen könnte.&lt;br /&gt;
&lt;br /&gt;
Habe zur Sicherheit bei allen Änderungen mal &lt;br /&gt;
&lt;br /&gt;
'''&amp;quot;initial declaration error&amp;quot; fix'''&lt;br /&gt;
&lt;br /&gt;
eingefügt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Neuer Abschnitt ==&lt;br /&gt;
&lt;br /&gt;
Zum letzten Abschnitt:  Stimmt!&lt;br /&gt;
&lt;br /&gt;
Mir ist aufgefallen, dass das Basic Beispieltestprogramm für die Tastenabfrage am Porta.7 den Pull-Up Widerstand verwendet, um bei nicht gedrückter Taste einen definierten Spannungspegel am AD Wandlereingang zu haben (+5V)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Config Adc = Single , Prescaler = Auto        'Für Tastenabfrage und Spannungsmessung &lt;br /&gt;
&lt;br /&gt;
Config Pina.7 = Input                         'Für Tastenabfrage &lt;br /&gt;
Porta.7 = 1                                   'Pullup Widerstand ein &lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies ist im C-Programm nicht so realisiert und der Pin hängt bei nicht gedrückter Taste in der Luft, was möglicher Weise zu dem im C-Programm beschriebenen Effekt führt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.....&lt;br /&gt;
&lt;br /&gt;
setportaon(7);		//Ohne das hier &amp;quot;flackern&amp;quot; die Werte aus irgend einem Grund -&amp;gt; es werden&lt;br /&gt;
                        // mitunter Tasten erkannt, die gar nicht gedrückt wurden oder das &lt;br /&gt;
                        //Programm bleibt für einige Sekunden &amp;quot;hängen&amp;quot;&lt;br /&gt;
waitms(1);&lt;br /&gt;
setportaoff(7);&lt;br /&gt;
....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Meine Lösung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.........&lt;br /&gt;
&lt;br /&gt;
/*### Hauptschleife ###*/&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	/*###Initialisierungsphase###*/&lt;br /&gt;
&lt;br /&gt;
	//Pins bzw. Ports als Ein-/Ausgänge konfigurieren&lt;br /&gt;
&lt;br /&gt;
	//Initialisierungen&lt;br /&gt;
	&lt;br /&gt;
	setportdoff(7);	//Speaker aus&lt;br /&gt;
	&lt;br /&gt;
	init_USART();	//USART konfigurieren&lt;br /&gt;
&lt;br /&gt;
	DDRA = 0x00;	//00000000 -&amp;gt; alle Analogports als Eingänge&lt;br /&gt;
    	&lt;br /&gt;
        SFIOR &amp;amp;= ~(1&amp;lt;&amp;lt;PUD);     // Pull-UP enable (nicht unbedingt nötig, aber zur Klarheit!)&lt;br /&gt;
        PORTA |= (1&amp;lt;&amp;lt;PA7);    // internen Pull-Up an PA7 aktivieren &lt;br /&gt;
&lt;br /&gt;
......&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann muss die Buttonabfrage wegen des Pull-Up Widerstandes entsprechend angepasst werden, denn er liegt nun parallel zu dem 10k Widerstand + 1 bis 4 1k Widerständen (je nach gedrückter Taste). Dann stimmen die Ergebnisse der AD Wandlung auch mit dem des Basic-Programms überein und können direkt übernommen werden&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
/*### Buttonabfrage ###*/&lt;br /&gt;
&lt;br /&gt;
uint8_t button(void)&lt;br /&gt;
{&lt;br /&gt;
	uint8_t taste = 0; 	//Variable für Nummer des Tasters&lt;br /&gt;
	uint16_t analog7 = adcwert(7);	//Wert des Ports&lt;br /&gt;
&lt;br /&gt;
//-----------auskommentieren, sonst wird der int. Pull Up Widerstand wieder abgeschaltet!&lt;br /&gt;
	&lt;br /&gt;
//	setportaon(7);		&lt;br /&gt;
//	waitms(1);&lt;br /&gt;
//	setportaoff(7);&lt;br /&gt;
&lt;br /&gt;
/ Die folgende Zeile ist nur zur Überprüfung aller gelesenen Werte und kann auskommentiert werden&lt;br /&gt;
	utoa(analog7, wort, 10),sendUSART(&amp;quot;ADC-Wert=&amp;quot;);sendUSART(wort);sendUSART(&amp;quot;\r\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	//Abfrage des gedrückten Tasters - um Störungen zu vermeiden wurden&lt;br /&gt;
        //die Bereiche sehr eng gefasst, sollten bei Bedarf an jedes Board extra angepasst werden.&lt;br /&gt;
	if((analog7&amp;gt;=400) &amp;amp;&amp;amp; (analog7&amp;lt;=450)) {taste = 1;utoa(analog7, wort, 10),sendUSART(&amp;quot;Wert=&amp;quot;);sendUSART(wort);}&lt;br /&gt;
	else if((analog7&amp;gt;=330) &amp;amp;&amp;amp; (analog7&amp;lt;=380)) {taste = 2;utoa(analog7, wort, 10),sendUSART(&amp;quot;ADC-Wert=&amp;quot;);sendUSART(wort);}&lt;br /&gt;
	else if((analog7&amp;gt;=260) &amp;amp;&amp;amp; (analog7&amp;lt;=305)) {taste = 3;utoa(analog7, wort, 10),sendUSART(&amp;quot;ADC-Wert=&amp;quot;);sendUSART(wort);}&lt;br /&gt;
	else if((analog7&amp;gt;=180) &amp;amp;&amp;amp; (analog7&amp;lt;=230)) {taste = 4;utoa(analog7, wort, 10),sendUSART(&amp;quot;ADC-Wert=&amp;quot;);sendUSART(wort);}&lt;br /&gt;
	else if((analog7&amp;gt;=90) &amp;amp;&amp;amp; (analog7&amp;lt;=130)) {taste = 5;utoa(analog7, wort, 10),sendUSART(&amp;quot;ADC-Wert=&amp;quot;);sendUSART(wort);}&lt;br /&gt;
	else {}&lt;br /&gt;
	&lt;br /&gt;
	return taste;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier mal die bei mir gemessenen AD Werte: (in der letzten Tabellenspalte wurde der interne Pull Up Widerstand (PW) durch einen externen 22k Widerstand ersetzt!)&lt;br /&gt;
&lt;br /&gt;
{| border= 1&lt;br /&gt;
 |Taste&lt;br /&gt;
 |ohne PW&lt;br /&gt;
 |mit internem PW&lt;br /&gt;
 |mit ext. PW (22k)&lt;br /&gt;
 |-&lt;br /&gt;
 |1&lt;br /&gt;
 |341&lt;br /&gt;
 |408&lt;br /&gt;
 |432&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|272&lt;br /&gt;
|340&lt;br /&gt;
|363&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|204&lt;br /&gt;
|268&lt;br /&gt;
|286&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|135&lt;br /&gt;
|190&lt;br /&gt;
|202&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|67&lt;br /&gt;
|106&lt;br /&gt;
|106&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Edvpc2</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Diskussion:RN-Control_Demoprogramm_in_C&amp;diff=13114</id>
		<title>Diskussion:RN-Control Demoprogramm in C</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Diskussion:RN-Control_Demoprogramm_in_C&amp;diff=13114"/>
				<updated>2008-01-27T15:12:31Z</updated>
		
		<summary type="html">&lt;p&gt;Edvpc2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das Programm erzeugt beim kompilieren mit AVRStudio 4.13.528 Fehler bei den For-Schleifen. Das rührt daher, dass in rncontrol.h Variablen in C++-Manier in den for-Anweisung selbst deklariert werden.&lt;br /&gt;
&lt;br /&gt;
Bsp.:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void sound(uint8_t hoehe, uint16_t laenge)&lt;br /&gt;
{&lt;br /&gt;
	for(uint16_t i=0; i&amp;lt;laenge*15; i=i+(2*hoehe))&lt;br /&gt;
	{&lt;br /&gt;
	setportdon(7);&lt;br /&gt;
	_delay_ms(hoehe);&lt;br /&gt;
	setportdoff(7);&lt;br /&gt;
	_delay_ms(hoehe);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fehler:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;error: 'for' loop initial declaration used outside C99 mode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Werde das jetzt an den relevanten Stellen so ändern :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void sound(uint8_t hoehe, uint16_t laenge)&lt;br /&gt;
{&lt;br /&gt;
        uint16_t i;&lt;br /&gt;
	for(i=0; i&amp;lt;laenge*15; i=i+(2*hoehe))&lt;br /&gt;
	{&lt;br /&gt;
	setportdon(7);&lt;br /&gt;
	_delay_ms(hoehe);&lt;br /&gt;
	setportdoff(7);&lt;br /&gt;
	_delay_ms(hoehe);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wäre schön, wenn es dann zur Sicherheit mal jemand testen könnte.&lt;br /&gt;
&lt;br /&gt;
Habe zur Sicherheit bei allen Änderungen mal &lt;br /&gt;
&lt;br /&gt;
'''&amp;quot;initial declaration error&amp;quot; fix'''&lt;br /&gt;
&lt;br /&gt;
eingefügt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Neuer Abschnitt ==&lt;br /&gt;
&lt;br /&gt;
Zum letzten Abschnitt:  Stimmt!&lt;br /&gt;
&lt;br /&gt;
Mir ist aufgefallen, dass das Basic Beispieltestprogramm für die Tastenabfrage am Porta.7 den Pull-Up Widerstand verwendet, um bei nicht gedrückter Taste einen definierten Spannungspegel am AD Wandlereingang zu haben (+5V)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Config Adc = Single , Prescaler = Auto        'Für Tastenabfrage und Spannungsmessung &lt;br /&gt;
&lt;br /&gt;
Config Pina.7 = Input                         'Für Tastenabfrage &lt;br /&gt;
Porta.7 = 1                                   'Pullup Widerstand ein &lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies ist im C-Programm nicht so realisiert und der Pin hängt bei nicht gedrückter Taste in der Luft, was möglicher Weise zu dem im C-Programm beschriebenen Effekt führt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.....&lt;br /&gt;
&lt;br /&gt;
setportaon(7);		//Ohne das hier &amp;quot;flackern&amp;quot; die Werte aus irgend einem Grund -&amp;gt; es werden&lt;br /&gt;
                        // mitunter Tasten erkannt, die gar nicht gedrückt wurden oder das &lt;br /&gt;
                        //Programm bleibt für einige Sekunden &amp;quot;hängen&amp;quot;&lt;br /&gt;
waitms(1);&lt;br /&gt;
setportaoff(7);&lt;br /&gt;
....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Meine Lösung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.........&lt;br /&gt;
&lt;br /&gt;
/*### Hauptschleife ###*/&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	/*###Initialisierungsphase###*/&lt;br /&gt;
&lt;br /&gt;
	//Pins bzw. Ports als Ein-/Ausgänge konfigurieren&lt;br /&gt;
&lt;br /&gt;
	//Initialisierungen&lt;br /&gt;
	&lt;br /&gt;
	setportdoff(7);	//Speaker aus&lt;br /&gt;
	&lt;br /&gt;
	init_USART();	//USART konfigurieren&lt;br /&gt;
&lt;br /&gt;
	DDRA = 0x00;	//00000000 -&amp;gt; alle Analogports als Eingänge&lt;br /&gt;
    	&lt;br /&gt;
        SFIOR &amp;amp;= ~(1&amp;lt;&amp;lt;PUD);     // Pull-UP enable (nicht unbedingt nötig, aber zur Klarheit!)&lt;br /&gt;
        PORTA |= (1&amp;lt;&amp;lt;PA7);    // internen Pull-Up an PA7 aktivieren &lt;br /&gt;
&lt;br /&gt;
......&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann muss die Buttonabfrage wegen des Pull-Up Widerstandes entsprechend angepasst werden, denn er liegt nun parallel zu dem 10k Widerstand + 1 bis 4 1k Widerständen (je nach gedrückter Taste). Dann stimmen die Ergebnisse der AD Wandlung auch mit dem des Basic-Programms überein und könne übernommen werden&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
/*### Buttonabfrage ###*/&lt;br /&gt;
&lt;br /&gt;
uint8_t button(void)&lt;br /&gt;
{&lt;br /&gt;
	uint8_t taste = 0; 	//Variable für Nummer des Tasters&lt;br /&gt;
	uint16_t analog7 = adcwert(7);	//Wert des Ports&lt;br /&gt;
&lt;br /&gt;
//-----------auskommentieren, sonst wird der int. Pull Up Widerstand wieder abgeschaltet!&lt;br /&gt;
	&lt;br /&gt;
//	setportaon(7);		&lt;br /&gt;
//	waitms(1);&lt;br /&gt;
//	setportaoff(7);&lt;br /&gt;
&lt;br /&gt;
/ Die folgende Zeile ist nur zur Überprüfung aller gelesenen Werte und kann auskommentiert werden&lt;br /&gt;
	utoa(analog7, wort, 10),sendUSART(&amp;quot;ADC-Wert=&amp;quot;);sendUSART(wort);sendUSART(&amp;quot;\r\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	//Abfrage des gedrückten Tasters - um Störungen zu vermeiden wurden&lt;br /&gt;
        //die Bereiche sehr eng gefasst, sollten bei Bedarf an jedes Board extra angepasst werden.&lt;br /&gt;
	if((analog7&amp;gt;=400) &amp;amp;&amp;amp; (analog7&amp;lt;=450)) {taste = 1;utoa(analog7, wort, 10),sendUSART(&amp;quot;Wert=&amp;quot;);sendUSART(wort);}&lt;br /&gt;
	else if((analog7&amp;gt;=330) &amp;amp;&amp;amp; (analog7&amp;lt;=380)) {taste = 2;utoa(analog7, wort, 10),sendUSART(&amp;quot;ADC-Wert=&amp;quot;);sendUSART(wort);}&lt;br /&gt;
	else if((analog7&amp;gt;=260) &amp;amp;&amp;amp; (analog7&amp;lt;=305)) {taste = 3;utoa(analog7, wort, 10),sendUSART(&amp;quot;ADC-Wert=&amp;quot;);sendUSART(wort);}&lt;br /&gt;
	else if((analog7&amp;gt;=180) &amp;amp;&amp;amp; (analog7&amp;lt;=230)) {taste = 4;utoa(analog7, wort, 10),sendUSART(&amp;quot;ADC-Wert=&amp;quot;);sendUSART(wort);}&lt;br /&gt;
	else if((analog7&amp;gt;=90) &amp;amp;&amp;amp; (analog7&amp;lt;=130)) {taste = 5;utoa(analog7, wort, 10),sendUSART(&amp;quot;ADC-Wert=&amp;quot;);sendUSART(wort);}&lt;br /&gt;
	else {}&lt;br /&gt;
	&lt;br /&gt;
	return taste;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier mal die bei mir gemessenen AD Werte: (in der letzten Tabellenspalte wurde der interne Pull Up Widerstand (PW) durch einen externen 22k Widerstand ersetzt!)&lt;br /&gt;
&lt;br /&gt;
{| border= 1&lt;br /&gt;
 |Taste&lt;br /&gt;
 |ohne PW&lt;br /&gt;
 |mit internem PW&lt;br /&gt;
 |mit ext. PW (22k)&lt;br /&gt;
 |-&lt;br /&gt;
 |1&lt;br /&gt;
 |341&lt;br /&gt;
 |408&lt;br /&gt;
 |432&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|272&lt;br /&gt;
|340&lt;br /&gt;
|363&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|204&lt;br /&gt;
|268&lt;br /&gt;
|286&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|135&lt;br /&gt;
|190&lt;br /&gt;
|202&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|67&lt;br /&gt;
|106&lt;br /&gt;
|106&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Edvpc2</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Diskussion:RN-Control_Demoprogramm_in_C&amp;diff=13113</id>
		<title>Diskussion:RN-Control Demoprogramm in C</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Diskussion:RN-Control_Demoprogramm_in_C&amp;diff=13113"/>
				<updated>2008-01-27T15:10:40Z</updated>
		
		<summary type="html">&lt;p&gt;Edvpc2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das Programm erzeugt beim kompilieren mit AVRStudio 4.13.528 Fehler bei den For-Schleifen. Das rührt daher, dass in rncontrol.h Variablen in C++-Manier in den for-Anweisung selbst deklariert werden.&lt;br /&gt;
&lt;br /&gt;
Bsp.:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void sound(uint8_t hoehe, uint16_t laenge)&lt;br /&gt;
{&lt;br /&gt;
	for(uint16_t i=0; i&amp;lt;laenge*15; i=i+(2*hoehe))&lt;br /&gt;
	{&lt;br /&gt;
	setportdon(7);&lt;br /&gt;
	_delay_ms(hoehe);&lt;br /&gt;
	setportdoff(7);&lt;br /&gt;
	_delay_ms(hoehe);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fehler:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;error: 'for' loop initial declaration used outside C99 mode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Werde das jetzt an den relevanten Stellen so ändern :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void sound(uint8_t hoehe, uint16_t laenge)&lt;br /&gt;
{&lt;br /&gt;
        uint16_t i;&lt;br /&gt;
	for(i=0; i&amp;lt;laenge*15; i=i+(2*hoehe))&lt;br /&gt;
	{&lt;br /&gt;
	setportdon(7);&lt;br /&gt;
	_delay_ms(hoehe);&lt;br /&gt;
	setportdoff(7);&lt;br /&gt;
	_delay_ms(hoehe);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wäre schön, wenn es dann zur Sicherheit mal jemand testen könnte.&lt;br /&gt;
&lt;br /&gt;
Habe zur Sicherheit bei allen Änderungen mal &lt;br /&gt;
&lt;br /&gt;
'''&amp;quot;initial declaration error&amp;quot; fix'''&lt;br /&gt;
&lt;br /&gt;
eingefügt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Neuer Abschnitt ==&lt;br /&gt;
&lt;br /&gt;
Zum letzten Abschnitt:  Stimmt!&lt;br /&gt;
&lt;br /&gt;
Mir ist aufgefallen, dass das Basic Beispieltestprogramm für die Tastenabfrage am Porta.7 den Pull-Up Widerstand verwendet, um bei nicht gedrückter Taste einen definierten Spannungspegel am AD Wandlereingang zu haben (+5V)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Config Adc = Single , Prescaler = Auto        'Für Tastenabfrage und Spannungsmessung &lt;br /&gt;
&lt;br /&gt;
Config Pina.7 = Input                         'Für Tastenabfrage &lt;br /&gt;
Porta.7 = 1                                   'Pullup Widerstand ein &lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies ist im C-Programm nicht so realisiert und der Pin hängt bei nicht gedrückter Taste in der Luft, was möglicher Weise zu dem im C-Programm beschriebenen Effekt führt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.....&lt;br /&gt;
&lt;br /&gt;
setportaon(7);		//Ohne das hier &amp;quot;flackern&amp;quot; die Werte aus irgend einem Grund -&amp;gt; es werden&lt;br /&gt;
                        // mitunter Tasten erkannt, die gar nicht gedrückt wurden oder das &lt;br /&gt;
                        //Programm bleibt für einige Sekunden &amp;quot;hängen&amp;quot;&lt;br /&gt;
waitms(1);&lt;br /&gt;
setportaoff(7);&lt;br /&gt;
....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Meine Lösung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.........&lt;br /&gt;
&lt;br /&gt;
/*### Hauptschleife ###*/&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	/*###Initialisierungsphase###*/&lt;br /&gt;
&lt;br /&gt;
	//Pins bzw. Ports als Ein-/Ausgänge konfigurieren&lt;br /&gt;
&lt;br /&gt;
	//Initialisierungen&lt;br /&gt;
	&lt;br /&gt;
	setportdoff(7);	//Speaker aus&lt;br /&gt;
	&lt;br /&gt;
	init_USART();	//USART konfigurieren&lt;br /&gt;
&lt;br /&gt;
	DDRA = 0x00;	//00000000 -&amp;gt; alle Analogports als Eingänge&lt;br /&gt;
    	&lt;br /&gt;
        SFIOR &amp;amp;= ~(1&amp;lt;&amp;lt;PUD);     // Pull-UP enable (nicht unbedingt nötig, aber zur Klarheit!)&lt;br /&gt;
        PORTA |= (1&amp;lt;&amp;lt;PA7);    // internen Pull-Up an PA7 aktivieren &lt;br /&gt;
&lt;br /&gt;
......&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann muss die Buttonabfrage wegen des Pull-Up Widerstandes entsprechend angepasst werden, denn er liegt nun parallel zu dem 10k Widerstand + 1 bis 4 1k Widerständen (je nach gedrückter Taste). Dann stimmen die Ergebnisse der AD Wandlung auch mit dem des Basic-Programms überein und könne übernommen werden&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
/*### Buttonabfrage ###*/&lt;br /&gt;
&lt;br /&gt;
uint8_t button(void)&lt;br /&gt;
{&lt;br /&gt;
	uint8_t taste = 0; 	//Variable für Nummer des Tasters&lt;br /&gt;
	uint16_t analog7 = adcwert(7);	//Wert des Ports&lt;br /&gt;
&lt;br /&gt;
//-----------auskommentieren, sonst wird der int. Pull Up Widerstand wieder abgeschaltet!&lt;br /&gt;
	&lt;br /&gt;
//	setportaon(7);		&lt;br /&gt;
//	waitms(1);&lt;br /&gt;
//	setportaoff(7);&lt;br /&gt;
&lt;br /&gt;
/ Die folgende Zeile ist nur zur Überprüfung aller gelesenen Werte und kann auskommentiert werden&lt;br /&gt;
	utoa(analog7, wort, 10),sendUSART(&amp;quot;ADC-Wert=&amp;quot;);sendUSART(wort);sendUSART(&amp;quot;\r\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	//Abfrage des gedrückten Tasters - um Störungen zu vermeiden wurden&lt;br /&gt;
        //die Bereiche sehr eng gefasst, sollten bei Bedarf an jedes Board extra angepasst werden.&lt;br /&gt;
	if((analog7&amp;gt;=400) &amp;amp;&amp;amp; (analog7&amp;lt;=450)) {taste = 1;utoa(analog7, wort, 10),sendUSART(&amp;quot;Wert=&amp;quot;);sendUSART(wort);}&lt;br /&gt;
	else if((analog7&amp;gt;=330) &amp;amp;&amp;amp; (analog7&amp;lt;=380)) {taste = 2;utoa(analog7, wort, 10),sendUSART(&amp;quot;ADC-Wert=&amp;quot;);sendUSART(wort);}&lt;br /&gt;
	else if((analog7&amp;gt;=260) &amp;amp;&amp;amp; (analog7&amp;lt;=305)) {taste = 3;utoa(analog7, wort, 10),sendUSART(&amp;quot;ADC-Wert=&amp;quot;);sendUSART(wort);}&lt;br /&gt;
	else if((analog7&amp;gt;=180) &amp;amp;&amp;amp; (analog7&amp;lt;=230)) {taste = 4;utoa(analog7, wort, 10),sendUSART(&amp;quot;ADC-Wert=&amp;quot;);sendUSART(wort);}&lt;br /&gt;
	else if((analog7&amp;gt;=90) &amp;amp;&amp;amp; (analog7&amp;lt;=130)) {taste = 5;utoa(analog7, wort, 10),sendUSART(&amp;quot;ADC-Wert=&amp;quot;);sendUSART(wort);}&lt;br /&gt;
	else {}&lt;br /&gt;
	&lt;br /&gt;
	return taste;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier mal die bei mir gemessenen AD Werte: (in der letzten Tabellenspalte wurde der interne Pull Up Widerstand durch einen externen 22k Widerstand ersetzt!)&lt;br /&gt;
&lt;br /&gt;
{| border= 1&lt;br /&gt;
 |Taste&lt;br /&gt;
 |ohne PW&lt;br /&gt;
 |mit internem PW&lt;br /&gt;
 |mit ext. PW (22k)&lt;br /&gt;
 |-&lt;br /&gt;
 |1&lt;br /&gt;
 |341&lt;br /&gt;
 |408&lt;br /&gt;
 |432&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|272&lt;br /&gt;
|340&lt;br /&gt;
|363&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|204&lt;br /&gt;
|268&lt;br /&gt;
|286&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|135&lt;br /&gt;
|190&lt;br /&gt;
|202&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|67&lt;br /&gt;
|106&lt;br /&gt;
|106&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Edvpc2</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Diskussion:RN-Control_Demoprogramm_in_C&amp;diff=13112</id>
		<title>Diskussion:RN-Control Demoprogramm in C</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Diskussion:RN-Control_Demoprogramm_in_C&amp;diff=13112"/>
				<updated>2008-01-27T15:08:52Z</updated>
		
		<summary type="html">&lt;p&gt;Edvpc2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das Programm erzeugt beim kompilieren mit AVRStudio 4.13.528 Fehler bei den For-Schleifen. Das rührt daher, dass in rncontrol.h Variablen in C++-Manier in den for-Anweisung selbst deklariert werden.&lt;br /&gt;
&lt;br /&gt;
Bsp.:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void sound(uint8_t hoehe, uint16_t laenge)&lt;br /&gt;
{&lt;br /&gt;
	for(uint16_t i=0; i&amp;lt;laenge*15; i=i+(2*hoehe))&lt;br /&gt;
	{&lt;br /&gt;
	setportdon(7);&lt;br /&gt;
	_delay_ms(hoehe);&lt;br /&gt;
	setportdoff(7);&lt;br /&gt;
	_delay_ms(hoehe);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fehler:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;error: 'for' loop initial declaration used outside C99 mode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Werde das jetzt an den relevanten Stellen so ändern :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void sound(uint8_t hoehe, uint16_t laenge)&lt;br /&gt;
{&lt;br /&gt;
        uint16_t i;&lt;br /&gt;
	for(i=0; i&amp;lt;laenge*15; i=i+(2*hoehe))&lt;br /&gt;
	{&lt;br /&gt;
	setportdon(7);&lt;br /&gt;
	_delay_ms(hoehe);&lt;br /&gt;
	setportdoff(7);&lt;br /&gt;
	_delay_ms(hoehe);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wäre schön, wenn es dann zur Sicherheit mal jemand testen könnte.&lt;br /&gt;
&lt;br /&gt;
Habe zur Sicherheit bei allen Änderungen mal &lt;br /&gt;
&lt;br /&gt;
'''&amp;quot;initial declaration error&amp;quot; fix'''&lt;br /&gt;
&lt;br /&gt;
eingefügt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Neuer Abschnitt ==&lt;br /&gt;
&lt;br /&gt;
Zum letzten Abschnitt:  Stimmt!&lt;br /&gt;
&lt;br /&gt;
Mir ist aufgefallen, dass das Basic Beispieltestprogramm für die Tastenabfrage am Porta.7 den Pull-Up Widerstand verwendet, um bei nicht gedrückter Taste einen definierten Spannungspegel am AD Wandlereingang zu haben (+5V)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Config Adc = Single , Prescaler = Auto        'Für Tastenabfrage und Spannungsmessung &lt;br /&gt;
&lt;br /&gt;
Config Pina.7 = Input                         'Für Tastenabfrage &lt;br /&gt;
Porta.7 = 1                                   'Pullup Widerstand ein &lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies ist im C-Programm nicht so realisiert und der Pin hängt bei nicht gedrückter Taste in der Luft, was möglicher Weise zu dem im C-Programm beschriebenen Effekt führt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.....&lt;br /&gt;
&lt;br /&gt;
setportaon(7);		//Ohne das hier &amp;quot;flackern&amp;quot; die Werte aus irgend einem Grund -&amp;gt; es werden&lt;br /&gt;
                        // mitunter Tasten erkannt, die gar nicht gedrückt wurden oder das &lt;br /&gt;
                        //Programm bleibt für einige Sekunden &amp;quot;hängen&amp;quot;&lt;br /&gt;
waitms(1);&lt;br /&gt;
setportaoff(7);&lt;br /&gt;
....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Meine Lösung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.........&lt;br /&gt;
&lt;br /&gt;
/*### Hauptschleife ###*/&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	/*###Initialisierungsphase###*/&lt;br /&gt;
&lt;br /&gt;
	//Pins bzw. Ports als Ein-/Ausgänge konfigurieren&lt;br /&gt;
&lt;br /&gt;
	//Initialisierungen&lt;br /&gt;
	&lt;br /&gt;
	setportdoff(7);	//Speaker aus&lt;br /&gt;
	&lt;br /&gt;
	init_USART();	//USART konfigurieren&lt;br /&gt;
&lt;br /&gt;
	DDRA = 0x00;	//00000000 -&amp;gt; alle Analogports als Eingänge&lt;br /&gt;
    	&lt;br /&gt;
        SFIOR &amp;amp;= ~(1&amp;lt;&amp;lt;PUD);     // Pull-UP enable (nicht unbedingt nötig, aber zur Klarheit!)&lt;br /&gt;
        PORTA |= (1&amp;lt;&amp;lt;PA7);    // internen Pull-Up an PA5  aktivieren &lt;br /&gt;
&lt;br /&gt;
......&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann muss die Buttonabfrage wegen des Pull-Up Widerstandes entsprechend angepasst werden, denn er liegt nun parallel zu dem 10k Widerstand + 1 bis 4 1k Widerständen (je nach gedrückter Taste). Dann stimmen die Ergebnisse der AD Wandlung auch mit dem des Basic-Programms überein und könne übernommen werden&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
/*### Buttonabfrage ###*/&lt;br /&gt;
&lt;br /&gt;
uint8_t button(void)&lt;br /&gt;
{&lt;br /&gt;
	uint8_t taste = 0; 	//Variable für Nummer des Tasters&lt;br /&gt;
	uint16_t analog7 = adcwert(7);	//Wert des Ports&lt;br /&gt;
&lt;br /&gt;
//-----------auskommentieren, sonst wird der int. Pull Up Widerstand wieder abgeschaltet!&lt;br /&gt;
	&lt;br /&gt;
//	setportaon(7);		&lt;br /&gt;
//	waitms(1);&lt;br /&gt;
//	setportaoff(7);&lt;br /&gt;
&lt;br /&gt;
/ Die folgende Zeile ist nur zur Überprüfung aller gelesenen Werte und kann auskommentiert werden&lt;br /&gt;
	utoa(analog7, wort, 10),sendUSART(&amp;quot;ADC-Wert=&amp;quot;);sendUSART(wort);sendUSART(&amp;quot;\r\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	//Abfrage des gedrückten Tasters - um Störungen zu vermeiden wurden&lt;br /&gt;
        //die Bereiche sehr eng gefasst, sollten bei Bedarf an jedes Board extra angepasst werden.&lt;br /&gt;
	if((analog7&amp;gt;=400) &amp;amp;&amp;amp; (analog7&amp;lt;=450)) {taste = 1;utoa(analog7, wort, 10),sendUSART(&amp;quot;Wert=&amp;quot;);sendUSART(wort);}&lt;br /&gt;
	else if((analog7&amp;gt;=330) &amp;amp;&amp;amp; (analog7&amp;lt;=380)) {taste = 2;utoa(analog7, wort, 10),sendUSART(&amp;quot;ADC-Wert=&amp;quot;);sendUSART(wort);}&lt;br /&gt;
	else if((analog7&amp;gt;=260) &amp;amp;&amp;amp; (analog7&amp;lt;=305)) {taste = 3;utoa(analog7, wort, 10),sendUSART(&amp;quot;ADC-Wert=&amp;quot;);sendUSART(wort);}&lt;br /&gt;
	else if((analog7&amp;gt;=180) &amp;amp;&amp;amp; (analog7&amp;lt;=230)) {taste = 4;utoa(analog7, wort, 10),sendUSART(&amp;quot;ADC-Wert=&amp;quot;);sendUSART(wort);}&lt;br /&gt;
	else if((analog7&amp;gt;=90) &amp;amp;&amp;amp; (analog7&amp;lt;=130)) {taste = 5;utoa(analog7, wort, 10),sendUSART(&amp;quot;ADC-Wert=&amp;quot;);sendUSART(wort);}&lt;br /&gt;
	else {}&lt;br /&gt;
	&lt;br /&gt;
	return taste;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier mal die bei mir gemessenen AD Werte: (in der letzten Tabellenspalte wurde der interne Pull Up Widerstand durch einen externen 22k Widerstand ersetzt!)&lt;br /&gt;
&lt;br /&gt;
{| border= 1&lt;br /&gt;
 |Taste&lt;br /&gt;
 |ohne PW&lt;br /&gt;
 |mit internem PW&lt;br /&gt;
 |mit ext. PW (22k)&lt;br /&gt;
 |-&lt;br /&gt;
 |1&lt;br /&gt;
 |341&lt;br /&gt;
 |408&lt;br /&gt;
 |432&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|272&lt;br /&gt;
|340&lt;br /&gt;
|363&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|204&lt;br /&gt;
|268&lt;br /&gt;
|286&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|135&lt;br /&gt;
|190&lt;br /&gt;
|202&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|67&lt;br /&gt;
|106&lt;br /&gt;
|106&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Edvpc2</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Diskussion:RN-Control_Demoprogramm_in_C&amp;diff=13108</id>
		<title>Diskussion:RN-Control Demoprogramm in C</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Diskussion:RN-Control_Demoprogramm_in_C&amp;diff=13108"/>
				<updated>2008-01-27T14:23:46Z</updated>
		
		<summary type="html">&lt;p&gt;Edvpc2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das Programm erzeugt beim kompilieren mit AVRStudio 4.13.528 Fehler bei den For-Schleifen. Das rührt daher, dass in rncontrol.h Variablen in C++-Manier in den for-Anweisung selbst deklariert werden.&lt;br /&gt;
&lt;br /&gt;
Bsp.:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void sound(uint8_t hoehe, uint16_t laenge)&lt;br /&gt;
{&lt;br /&gt;
	for(uint16_t i=0; i&amp;lt;laenge*15; i=i+(2*hoehe))&lt;br /&gt;
	{&lt;br /&gt;
	setportdon(7);&lt;br /&gt;
	_delay_ms(hoehe);&lt;br /&gt;
	setportdoff(7);&lt;br /&gt;
	_delay_ms(hoehe);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fehler:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;error: 'for' loop initial declaration used outside C99 mode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Werde das jetzt an den relevanten Stellen so ändern :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void sound(uint8_t hoehe, uint16_t laenge)&lt;br /&gt;
{&lt;br /&gt;
        uint16_t i;&lt;br /&gt;
	for(i=0; i&amp;lt;laenge*15; i=i+(2*hoehe))&lt;br /&gt;
	{&lt;br /&gt;
	setportdon(7);&lt;br /&gt;
	_delay_ms(hoehe);&lt;br /&gt;
	setportdoff(7);&lt;br /&gt;
	_delay_ms(hoehe);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wäre schön, wenn es dann zur Sicherheit mal jemand testen könnte.&lt;br /&gt;
&lt;br /&gt;
Habe zur Sicherheit bei allen Änderungen mal &lt;br /&gt;
&lt;br /&gt;
'''&amp;quot;initial declaration error&amp;quot; fix'''&lt;br /&gt;
&lt;br /&gt;
eingefügt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Neuer Abschnitt ==&lt;br /&gt;
&lt;br /&gt;
Zum letzten Abschnitt:  Stimmt!&lt;br /&gt;
&lt;br /&gt;
Mir ist aufgefallen, dass das Basic Beispieltestprogramm für die Tastenabfrage am Porta.7 den Pull-Up Widerstand verwendet, um bei nicht gedrückter Taste einen definierten Spannungspegel am AD Wandlereingang zu haben (1023)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Config Adc = Single , Prescaler = Auto        'Für Tastenabfrage und Spannungsmessung &lt;br /&gt;
&lt;br /&gt;
Config Pina.7 = Input                         'Für Tastenabfrage &lt;br /&gt;
Porta.7 = 1                                   'Pullup Widerstand ein &lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies ist im C-Programm nicht so realisiert und der Pin hängt bei nicht gedrückter Taste in der Luft, was möglicher Weise zu dem im C-Programm beschriebenen Effekt führt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.....&lt;br /&gt;
&lt;br /&gt;
setportaon(7);		//Ohne das hier &amp;quot;flackern&amp;quot; die Werte aus irgend einem Grund -&amp;gt; es werden mitunter Tasten erkannt, die gar nicht gedrückt wurden oder das Programm bleibt für einige Sekunden &amp;quot;hängen&amp;quot;&lt;br /&gt;
	waitms(1);&lt;br /&gt;
setportaoff(7);&lt;br /&gt;
....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Meine Lösung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.........&lt;br /&gt;
&lt;br /&gt;
/*### Hauptschleife ###*/&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	/*###Initialisierungsphase###*/&lt;br /&gt;
&lt;br /&gt;
	//Pins bzw. Ports als Ein-/Ausgänge konfigurieren&lt;br /&gt;
&lt;br /&gt;
	//Initialisierungen&lt;br /&gt;
	&lt;br /&gt;
	setportdoff(7);	//Speaker aus&lt;br /&gt;
	&lt;br /&gt;
	init_USART();	//USART konfigurieren&lt;br /&gt;
&lt;br /&gt;
	DDRA = 0x00;	//00000000 -&amp;gt; alle Analogports als Eingänge&lt;br /&gt;
    	&lt;br /&gt;
        SFIOR &amp;amp;= ~(1&amp;lt;&amp;lt;PUD);     // Pull-UP enable (nicht unbedingt nötig, aber zur Klarheit!)&lt;br /&gt;
        PORTA |= (1&amp;lt;&amp;lt;PA7);    // internen Pull-Up an PA5  aktivieren &lt;br /&gt;
&lt;br /&gt;
......&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann muss die Buttonabfrage wegen des Pull-Up Widerstandes entsprechend angepasst werden, denn er liegt nun parallel zu dem 10k Widerstand + 1 bis 4 1k Widerständen (je nach gedrückter Taste). Dann stimmen die Ergebnisse der AD Wandlung auch mit dem des Basic-Programms überein und könne übernommen werden&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
/*### Buttonabfrage ###*/&lt;br /&gt;
&lt;br /&gt;
uint8_t button(void)&lt;br /&gt;
{&lt;br /&gt;
	uint8_t taste = 0; 	//Variable für Nummer des Tasters&lt;br /&gt;
	uint16_t analog7 = adcwert(7);	//Wert des Ports&lt;br /&gt;
	&lt;br /&gt;
//	setportaon(7);		//Ohne das hier &amp;quot;flackern&amp;quot; die Werte aus irgend einem Grund -&amp;gt; es werden mitunter Tasten erkannt, die gar nicht gedrückt wurden oder das Programm bleibt für einige Sekunden &amp;quot;hängen&amp;quot;&lt;br /&gt;
//	waitms(1);&lt;br /&gt;
//	setportaoff(7);&lt;br /&gt;
/ Die folgende Zeile ist nur zur Überprüfung aller gelesenen Werte und kann auskommentiert werden&lt;br /&gt;
	utoa(analog7, wort, 10),sendUSART(&amp;quot;ADC-Wert=&amp;quot;);sendUSART(wort);sendUSART(&amp;quot;\r\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	//Abfrage des gedrückten Tasters - um Störungen zu vermeiden wurden&lt;br /&gt;
        //die Bereiche sehr eng gefasst, sollten bei Bedarf an jedes Board extra angepasst werden.&lt;br /&gt;
	if((analog7&amp;gt;=400) &amp;amp;&amp;amp; (analog7&amp;lt;=450)) {taste = 1;utoa(analog7, wort, 10),sendUSART(&amp;quot;Wert=&amp;quot;);sendUSART(wort);}&lt;br /&gt;
	else if((analog7&amp;gt;=330) &amp;amp;&amp;amp; (analog7&amp;lt;=380)) {taste = 2;utoa(analog7, wort, 10),sendUSART(&amp;quot;ADC-Wert=&amp;quot;);sendUSART(wort);}&lt;br /&gt;
	else if((analog7&amp;gt;=260) &amp;amp;&amp;amp; (analog7&amp;lt;=305)) {taste = 3;utoa(analog7, wort, 10),sendUSART(&amp;quot;ADC-Wert=&amp;quot;);sendUSART(wort);}&lt;br /&gt;
	else if((analog7&amp;gt;=180) &amp;amp;&amp;amp; (analog7&amp;lt;=230)) {taste = 4;utoa(analog7, wort, 10),sendUSART(&amp;quot;ADC-Wert=&amp;quot;);sendUSART(wort);}&lt;br /&gt;
	else if((analog7&amp;gt;=90) &amp;amp;&amp;amp; (analog7&amp;lt;=130)) {taste = 5;utoa(analog7, wort, 10),sendUSART(&amp;quot;ADC-Wert=&amp;quot;);sendUSART(wort);}&lt;br /&gt;
	else {}&lt;br /&gt;
	&lt;br /&gt;
	return taste;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier mal die bei mir gemessenen AD Werte:&lt;br /&gt;
&lt;br /&gt;
{| border= 1&lt;br /&gt;
 |Taste&lt;br /&gt;
 |ohne PW&lt;br /&gt;
 |mit internem PW&lt;br /&gt;
 |mit ext. PW (22k)&lt;br /&gt;
 |-&lt;br /&gt;
 |1&lt;br /&gt;
 |341&lt;br /&gt;
 |408&lt;br /&gt;
 |432&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|272&lt;br /&gt;
|340&lt;br /&gt;
|363&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|204&lt;br /&gt;
|268&lt;br /&gt;
|286&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|135&lt;br /&gt;
|190&lt;br /&gt;
|202&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|67&lt;br /&gt;
|106&lt;br /&gt;
|106&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Edvpc2</name></author>	</entry>

	<entry>
		<id>https://rn-wissen.de/wiki/index.php?title=Diskussion:RN-Control_Demoprogramm_in_C&amp;diff=13107</id>
		<title>Diskussion:RN-Control Demoprogramm in C</title>
		<link rel="alternate" type="text/html" href="https://rn-wissen.de/wiki/index.php?title=Diskussion:RN-Control_Demoprogramm_in_C&amp;diff=13107"/>
				<updated>2008-01-27T14:21:52Z</updated>
		
		<summary type="html">&lt;p&gt;Edvpc2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Das Programm erzeugt beim kompilieren mit AVRStudio 4.13.528 Fehler bei den For-Schleifen. Das rührt daher, dass in rncontrol.h Variablen in C++-Manier in den for-Anweisung selbst deklariert werden.&lt;br /&gt;
&lt;br /&gt;
Bsp.:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void sound(uint8_t hoehe, uint16_t laenge)&lt;br /&gt;
{&lt;br /&gt;
	for(uint16_t i=0; i&amp;lt;laenge*15; i=i+(2*hoehe))&lt;br /&gt;
	{&lt;br /&gt;
	setportdon(7);&lt;br /&gt;
	_delay_ms(hoehe);&lt;br /&gt;
	setportdoff(7);&lt;br /&gt;
	_delay_ms(hoehe);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fehler:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;error: 'for' loop initial declaration used outside C99 mode&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Werde das jetzt an den relevanten Stellen so ändern :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void sound(uint8_t hoehe, uint16_t laenge)&lt;br /&gt;
{&lt;br /&gt;
        uint16_t i;&lt;br /&gt;
	for(i=0; i&amp;lt;laenge*15; i=i+(2*hoehe))&lt;br /&gt;
	{&lt;br /&gt;
	setportdon(7);&lt;br /&gt;
	_delay_ms(hoehe);&lt;br /&gt;
	setportdoff(7);&lt;br /&gt;
	_delay_ms(hoehe);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wäre schön, wenn es dann zur Sicherheit mal jemand testen könnte.&lt;br /&gt;
&lt;br /&gt;
Habe zur Sicherheit bei allen Änderungen mal &lt;br /&gt;
&lt;br /&gt;
'''&amp;quot;initial declaration error&amp;quot; fix'''&lt;br /&gt;
&lt;br /&gt;
eingefügt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Neuer Abschnitt ==&lt;br /&gt;
&lt;br /&gt;
Zum letzten Abschnitt:  Stimmt!&lt;br /&gt;
&lt;br /&gt;
Mir ist aufgefallen, dass das Basic Beispieltestprogramm für die Tastenabfrage am Porta.7 den Pull-Up Widerstand verwendet, um bei nicht gedrückter Taste einen definierten Spannungspegel am AD Wandlereingang zu haben&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
Config Adc = Single , Prescaler = Auto        'Für Tastenabfrage und Spannungsmessung &lt;br /&gt;
&lt;br /&gt;
Config Pina.7 = Input                         'Für Tastenabfrage &lt;br /&gt;
Porta.7 = 1                                   'Pullup Widerstand ein &lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies ist im C-Programm nicht so realisiert und der Pin hängt bei nicht gedrückter Taste in der Luft, was möglicher Weise zu dem im C-Programm beschriebenen Effekt führt&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.....&lt;br /&gt;
&lt;br /&gt;
setportaon(7);		//Ohne das hier &amp;quot;flackern&amp;quot; die Werte aus irgend einem Grund -&amp;gt; es werden mitunter Tasten erkannt, die gar nicht gedrückt wurden oder das Programm bleibt für einige Sekunden &amp;quot;hängen&amp;quot;&lt;br /&gt;
	waitms(1);&lt;br /&gt;
setportaoff(7);&lt;br /&gt;
....&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Meine Lösung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
.........&lt;br /&gt;
&lt;br /&gt;
/*### Hauptschleife ###*/&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	/*###Initialisierungsphase###*/&lt;br /&gt;
&lt;br /&gt;
	//Pins bzw. Ports als Ein-/Ausgänge konfigurieren&lt;br /&gt;
&lt;br /&gt;
	//Initialisierungen&lt;br /&gt;
	&lt;br /&gt;
	setportdoff(7);	//Speaker aus&lt;br /&gt;
	&lt;br /&gt;
	init_USART();	//USART konfigurieren&lt;br /&gt;
&lt;br /&gt;
	DDRA = 0x00;	//00000000 -&amp;gt; alle Analogports als Eingänge&lt;br /&gt;
    	&lt;br /&gt;
        SFIOR &amp;amp;= ~(1&amp;lt;&amp;lt;PUD);     // Pull-UP enable (nicht unbedingt nötig, aber zur Klarheit!)&lt;br /&gt;
        PORTA |= (1&amp;lt;&amp;lt;PA7);    // internen Pull-Up an PA5  aktivieren &lt;br /&gt;
&lt;br /&gt;
......&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann muss die Buttonabfrage wegen des Pull-Up Widerstandes entsprechend angepasst werden, denn er liegt nun parallel zu dem 10k Widerstand + 1 bis 4 1k Widerständen (je nach gedrückter Taste). Dann stimmen die Ergebnisse der AD Wandlung auch mit dem des Basic-Programms überein und könne übernommen werden&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
/*### Buttonabfrage ###*/&lt;br /&gt;
&lt;br /&gt;
uint8_t button(void)&lt;br /&gt;
{&lt;br /&gt;
	uint8_t taste = 0; 	//Variable für Nummer des Tasters&lt;br /&gt;
	uint16_t analog7 = adcwert(7);	//Wert des Ports&lt;br /&gt;
	&lt;br /&gt;
//	setportaon(7);		//Ohne das hier &amp;quot;flackern&amp;quot; die Werte aus irgend einem Grund -&amp;gt; es werden mitunter Tasten erkannt, die gar nicht gedrückt wurden oder das Programm bleibt für einige Sekunden &amp;quot;hängen&amp;quot;&lt;br /&gt;
//	waitms(1);&lt;br /&gt;
//	setportaoff(7);&lt;br /&gt;
/ Die folgende Zeile ist nur zur Überprüfung aller gelesenen Werte und kann auskommentiert werden&lt;br /&gt;
	utoa(analog7, wort, 10),sendUSART(&amp;quot;ADC-Wert=&amp;quot;);sendUSART(wort);sendUSART(&amp;quot;\r\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	//Abfrage des gedrückten Tasters - um Störungen zu vermeiden wurden&lt;br /&gt;
        //die Bereiche sehr eng gefasst, sollten bei Bedarf an jedes Board extra angepasst werden.&lt;br /&gt;
	if((analog7&amp;gt;=400) &amp;amp;&amp;amp; (analog7&amp;lt;=450)) {taste = 1;utoa(analog7, wort, 10),sendUSART(&amp;quot;Wert=&amp;quot;);sendUSART(wort);}&lt;br /&gt;
	else if((analog7&amp;gt;=330) &amp;amp;&amp;amp; (analog7&amp;lt;=380)) {taste = 2;utoa(analog7, wort, 10),sendUSART(&amp;quot;ADC-Wert=&amp;quot;);sendUSART(wort);}&lt;br /&gt;
	else if((analog7&amp;gt;=260) &amp;amp;&amp;amp; (analog7&amp;lt;=305)) {taste = 3;utoa(analog7, wort, 10),sendUSART(&amp;quot;ADC-Wert=&amp;quot;);sendUSART(wort);}&lt;br /&gt;
	else if((analog7&amp;gt;=180) &amp;amp;&amp;amp; (analog7&amp;lt;=230)) {taste = 4;utoa(analog7, wort, 10),sendUSART(&amp;quot;ADC-Wert=&amp;quot;);sendUSART(wort);}&lt;br /&gt;
	else if((analog7&amp;gt;=90) &amp;amp;&amp;amp; (analog7&amp;lt;=130)) {taste = 5;utoa(analog7, wort, 10),sendUSART(&amp;quot;ADC-Wert=&amp;quot;);sendUSART(wort);}&lt;br /&gt;
	else {}&lt;br /&gt;
	&lt;br /&gt;
	return taste;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier mal die bei mir gemessenen AD Werte:&lt;br /&gt;
&lt;br /&gt;
{| border= 1&lt;br /&gt;
 |Taste&lt;br /&gt;
 |ohne PW&lt;br /&gt;
 |mit internem PW&lt;br /&gt;
 |mit ext. PW (22k)&lt;br /&gt;
 |-&lt;br /&gt;
 |1&lt;br /&gt;
 |341&lt;br /&gt;
 |408&lt;br /&gt;
 |432&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|272&lt;br /&gt;
|340&lt;br /&gt;
|363&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|204&lt;br /&gt;
|268&lt;br /&gt;
|286&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|135&lt;br /&gt;
|190&lt;br /&gt;
|202&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|67&lt;br /&gt;
|106&lt;br /&gt;
|106&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Edvpc2</name></author>	</entry>

	</feed>