PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hilfe beim Facharbeitsprojekt



t1000hh
30.01.2011, 19:52
Hallo Asuro Freunde,
kurze Einleitung:

Ich bin gelernter Elektroniker und mache nun meinen Staatlich Geprüften Techniker in Elektronik und habe mir als Projekt den Asuro ausgesucht.

Das zusammen löten verlief natürlich ohne Probleme.
da wir in der Schule jedoch das Thema Micro Controler erst später bekommen aber es zeitlich sonst zu spät wäre habe ich jetzt schon angefangen und muss ohne den Stoff klar kommen und ich hoffe ich bekomme hier etwas unterstützung.

für den Anfang habe ich folgendes Problem:


ich habe die lib folgendermaße eingebunden

C:ASURO_src -> AsuroLib-v280rc1
->FirstTry
->SelfTest
das makefile habe ich nicht verändert weil ich

# additional Include path for libraries
LIBPATH = ../../lib

darin nicht gefunden habe an der stelle steht bei mir:


# Additional libraries
#
# Minimalistic printf version
#LDFLAGS += -Wl,-u,vfprintf -lprintf_min
#
# Floating point printf version (requires -lm below)
#LDFLAGS += -Wl,-u,vfprintf -lprintf_flt
#
# -lm = math library
LDFLAGS += -lm

WinARV habe ich das aktuellste genommen
C:WinAVR-20100110
habe ich im Makefile eingebunden

Wenn ich Programme ein spiele auch fertige... bekomme ich Fehler (folgen)
habe ein einfaches Programm mal geschrieben:
Beispiel:


#include "asuro.h"

int main(void)
{
Init();
StatusLED(RED);
Sleep(200);
StatusLED(YELLOW);
Sleep(200);
StatusLED(OFF);
Sleep(200);
StatusLED(GREEN);
while(1);
return 0;
}


es wird auch ohne Fehler comprimiert nur eine Warnung tritt auf:

from test.c:1:
c:/winavr-20100110/lib/gcc/../../avr/include/avr/signal.h:36:2: warning: #warning "This header file is obsolete. Use <avr/interrupt.h>."

Die Hexe-Datei wird erzeugt.
dann habe ich das Programm ohne Probleme via Infrarot übertragen und es leuchten gleich nach der initialisierung die grüne LED

-ist es noch ein Fehler bei der Einrichtung des Compailers oder ein programmier Fehler???
- wenn ich die Zeit statt 200 auf 500 oder 1000 ,was eine Sekunde sein sollte, setze, kommt n Fehler der Wert sei zu hoch wie hoch darf der sein was entsprechen die Zahlen an Zeit?
vielen Dank im Vorraus!!!

Gruß Chris

MST1
30.01.2011, 20:07
- wenn ich die Zeit statt 200 auf 500 oder 1000 ,was eine Sekunde sein sollte, setze, kommt n Fehler der Wert sei zu hoch wie hoch darf der sein was entsprechen die Zahlen an Zeit?

sie darf max 255 sein erklärung findest du hier: http://www.arexx.com/downloads/asuro/asuro_manual_de.pdf

Diese Funktion lässt den Prozessor für eine einstellbare Zeit warten. Damit kann man prima
Verzögerungen programmieren. Diese Funktion basiert auf einem 72kHz-Timer und kann als
Parameter maximal den Wert 255 übergeben bekommen (unsigned char)4.
Beispiel: 0,003s
Der Prozessor soll für ca. 3ms warten ==> 1 = 216. Die Funktion Sleep () wird für 3ms
langes Warten wie folgt aufgerufen: 72KHz
Sleep (216) ;

Bei deinem anderen Fehler kann ich dir nicht helfen, soviel weis ich dann doch noch nicht.

avrrobot
30.01.2011, 20:13
bei mir geht das programm einwandfrei, und wennich im programmers notepad auf make all klicke kommt kein fehler. es könnte sein, dass der fehler durch falsches benutzen der Sleep(ms) funktion kommt, da das das einzige ist, was interrupts verwendet. ist aber nur eine theorie. :-k

zu dem problem mit dem Sleep ich empfehle dir folgende funktion:

int wait(int ms){
int integer; //kann man natürlich nennen wie man will
while(integer<ms){
integer++;
Sleep(72);
}
}

wer fehler findet, darf sie behalten! 8-[

avrrobot

TobiKa
30.01.2011, 20:16
from test.c:1:
c:/winavr-20100110/lib/gcc/../../avr/include/avr/signal.h:36:2: warning: #warning "This header file is obsolete. Use <avr/interrupt.h>."
Da steht doch ganz genau was das Problem ist und wie es behpben werden kann! Falls du/ihr der englischen Sprache nciht so mächtig seid, gibts übersetzungstools im Internet.
Die signal.h ist veraltet, benutze die interrupt.h

radbruch
30.01.2011, 20:36
Hallo

Sicherer wäre so:

int integer=0; //kann man natürlich nennen wie man will

Meine Datei asuro.h beginnt so:


#include <avr/io.h>
#include <avr/interrupt.h>
//#include <avr/signal.h>
#include <stdlib.h>


Gruß

mic

t1000hh
30.01.2011, 22:47
erstmal an alle vielen dank für so schnelle Antworten!!



from test.c:1:
c:/winavr-20100110/lib/gcc/../../avr/include/avr/signal.h:36:2: warning: #warning "This header file is obsolete. Use <avr/interrupt.h>."
Da steht doch ganz genau was das Problem ist und wie es behpben werden kann! Falls du/ihr der englischen Sprache nciht so mächtig seid, gibts übersetzungstools im Internet.
Die signal.h ist veraltet, benutze die interrupt.h

ja das konnte ich mir denken nun die frage wie benutze ich die interrupt.h
und wo wird die signal.h verwendet das sagt mir irgendiwe garnichts.

und irgendwie kommt mir das so vor als ob man die Zeitverzögerung "Sleep()" nur für miliSekunden verwenden kann geht es auch für Sekunden?
zum Beispiel LED leuchtet 2 Sekunden Grün dann 2 Sekunden Rot usw

TobiKa
30.01.2011, 22:50
Du hast jetzt für dein erstes Problem einen Beispielcode bekommen und für dein zweites auch. Liesst du die anderen Posts nicht?

radbruch
30.01.2011, 23:14
Hallo

Für uns "alte Hasen" scheint das einfach, für Einsteiger ist es aber möglicherweise verwirrend. Die Frage ist: Wo steigt man ein beim Erklären?

Die Warnung beim Kompilieren wird von folgendem Eintrag in der Datei asuro.h verursacht:

#include <avr/signal.h>

signal.h wurde früher von WinAVR verwendet und ist in der aktuellen Version durch interrupt.h ersetzt worden. Deshalb muss die Zeile nun so aussehen:

#include <avr/interrupt.h>

In der orginalen CD-Version der asuro-Library verwendet sleep() einen 72kHz-Timer zur Zeitmessung. Deshalb dauert die kleinste Verzögerung von sleep(1) genau 1/72000 Sekunden, sleep(72) dauert entsprechend 1/1000 Sekunde. Eine Verzögerung von einer Sekunde erreicht man durch mehrfachen Aufruf von sleep() in einer Schleife:

int i;
for(i=0; i<1000; i++) sleep(72);

Was mich stört: Du scheinst du Version 2.8 der Library zu verwenden. Warum tritt trotzdem die Warnung auf? Ich dachte, die aktuelle Lib würde interrupt.h verwenden. Möglicherweise ist die Library nicht richtig installiert.

Alle Libs nach ca. V2.1 sollten auch die Funktion Msleep() kennen. Diese verzögert um 1/1000 Sekunde und möchte einen 16-Bit-Parameter. Damit sind Verzögerungen bis ca. 65 Sekunden machbar.

Gruß

mic

TobiKa
30.01.2011, 23:17
Ja hast schon recht, war auch nicht so ernst gemeint wie es vielleicht rüberkam!!

t1000hh
31.01.2011, 10:34
nochmals vielen dank an die Zahlreichen Beiträge
@TobiKa sorry blicke da noch nicht so ganz durch habe zwar Grundkenntnisse von C++ aber das mit der lib ist doch etwas verwirrend dafür das man in der Praxis nichts damit zu tun hatte.

Ich habe das nun so hin bekommen, dass es keine Fehler und Warnungen mehr gibt nach meinem ersten Programm.

Ich habe die asuro.h Datei aus C:ASURO_src ->FirstTry gelöscht und
die asuro.h Datei von
C:ASURO_src -> AsuroLib-v280rc1 dort rein kopiert
wie gesagt nun Funktioniert es oder war das jetzt nicht so ne gute Idee?

und durch die Schleife

int i;
for(i=0; i<1000; i++) sleep(72);

geht es so wie ich es wollte vielen Dank!!!
=D>