Software und Quellcodes für Microcontroller
Moderator: Moderatorengruppe
Nein, aber die Hitachi Prozessoren sind hierzulande nicht sehr verbreitet und hardwarenahe Programme kann man nicht schreiben, ohne die verwendete Hardware und den Schaltplan zu kennen.Ich ging eigentlich davon aus, dass so eine Funktion, für jemanden der einen µC programmieren kann, ein Klacks ist.
Bin ich hier im falschen Forum, oder in der falschen Rubrik ?
Stell die Frage doch mal bei mikrocontroller.net. Wenn Du gleich dazuschreibst, daß man hier nicht helfen konnte, dann kriegst Du auch keinen Rüffel wegen crossposting.
Menson hat geschrieben:Programmierer sind scheinbar ein sehr eigenes Volk
Bitte nicht so verallgemeinern. Ich kenne sehr freundlichen Programmiererforen. Allerdings nicht im Microcontrollerbereich. µC.net empfinde ich allerdings auch als sehr ruppiges Forum.
Ach daher hast du diesen Exoten.möchte blos meinen R8C/13 aus der Elektor sinnvoll nutzen
Den Assemblerdialekt des betreffenden Prozessors musst du ohnehin verstehen, sonst wird es dir auch in C kaum gelingen die Hardware in den Griff zu bekommen.
while(1)
{
lcd_pos (2,4);
lcd_integer(temperatur(ad_in(6)));
delayus(50000);
}
int temperatur(unsigned int adc)
{
int t=(int) adc;
t*=25;
t+=4;
t/=8;
t*25;
t+=8;
t/=16;
t-=600;
return t;
}
Menson hat geschrieben:Stell die Frage doch mal bei mikrocontroller.net. Wenn Du gleich dazuschreibst, daß man hier nicht helfen konnte, dann kriegst Du auch keinen Rüffel wegen crossposting.
Den hab ich schon vorher bekommen.
Die meinten ich soll gefälligst selber eine Programmiersprache lernen und meine Arbeit selber machen.
Sind nicht sehr kooperativ da. Die glaubten vllt. sie sollten meine Schulaufgaben machen. Dabei will ich gar kein Programmierer werden. Bin Pensionist und möchte blos meinen R8C/13 aus der Elektor sinnvoll nutzen - nichts weiter.
Ist aber nicht so einfach. Programmierer sind scheinbar ein sehr eigenes Volk
Fuer die Endlosschleife in der main() wuerd' ich folgendes vorschlagen:
- Code: Alles auswählen
while(1)
{
lcd_pos (2,4);
lcd_integer(temperatur(ad_in(6)));
delayus(50000);
}
while(1)
{
lcd_integer(ad_in(6));
temperatur();
delayus(50000);
}
Die Funktion temperatur() koennte dann irgendwie so aussehen:
- Code: Alles auswählen
int temperatur(unsigned int adc)
{
int t=(int) adc;
t*=25;
t+=4;
t/=8;
t*25;
t+=8;
t/=16;
t-=600;
return t;
}
float u;
long int t;
u = (float) ad_in(6);
u = u / 1023.0 * 5.0;
u = u - 0.6;
initlcd(); // LCD Refresh
lcd_pos (1,8); // LCD Position (1.Zeile, 8.Zeichen
lcddata (u); // schreibe Variable u ins Display
t=0;
while (t<100000){t=t+1;} // Pause (~1/10sec)
u = (float) ad_in(6);
u = u / 1023.0 * 5.0;
u = u - 0.6;
lcddata (u);
t=0;
while (t<100000){t=t+1;} // Pause (~1/10sec)
Menson hat geschrieben:So geht das schon mal nicht. Die Endlosschleife in main() sieht so aus:
- Code: Alles auswählen
while(1)
{
lcd_integer(ad_in(6));
temperatur();
delayus(50000);
}
Diese Befehle kann der Compiler so nicht lesen.
Ich hab die Funktion mal so geschrieben:
...
lcddata (u); // schreibe Variable u ins Display
lcd_integer(1000*u);// schreibe Variable u ins Display
Das ist das Problem. Diese Funktion schreibt wahrscheinlich nicht eine Integer aufs Display, sondern nur ein Byte - also ein ASCII Zeichen oder einen Steuerbefehl. Wie waers stattdessen mit
Code: Alles auswählenlcd_integer(1000*u);// schreibe Variable u ins Display
Dann haste ne Chance, die Temperatur in 1/10 °C angezeigt zu bekommen. Den Dezimalpunkt und Vorzeichenfaxen kannste dann immernoch hinfummeln, wenn das erstmal funktioniert.
Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste