Hallo, möchte das flightlight von dieser seite (http://der-frickler.net/modellbau/avr/flightlight) nachbauen. Hab das problem dass auf der homepage ein mega8 verwendet wurde und ich im moment nur einen mega8535 habe. Mir wurde gesagt dass ich den Quellcode umschreiben müsste da ich aber in C nicht so gewandt bin wollte ich fragen ob mir dabei jemand helfen könnte. Mfg Peter P.S. Datei könnt ihr auf der oben genannten Website herunterladen
Du meinst, du suchst jemanden, der es für dich macht? Kleiner Tipp: Hol dir einen Mega8. Du wirst hier wohl kaum jemanden finden, der das für dich macht. Wenn du aber konkrete Fragen zur Anpassung einzelner Codesegmente hast, dann wird dir sicherlich jemand helfen.
Peter L. schrieb: > Mir wurde gesagt dass ich den Quellcode > umschreiben müsste da ich aber in C nicht so gewandt bin wollte ich > fragen ob mir dabei jemand helfen könnte. Mit C Kenntnissen hat das wenig zu tun. Ohne den mega8535 näher zu kennen, vermut ich, dass du nur ein paar Registerbezeichnungen anpassen mußt. Aber warum so einen "riesen" Prozessor, wenn alles für eine mega8 fertig ist?
Was gibt es denn für Probleme, wenn du das Programm für einen ATmega8535 kompilierst?
Wenn du C nicht kannst, dann lerne es bitte. Ist immer nützlich. Niemand wird für dich das ganze "umschreiben", wenn das überhaupt soo viel sein sollte. Aber viel besser wäre doch noch, wenn du dir deinen eigenen Code schreiben würdest, weil man mehr lernt und es mehr Spaß macht.
Tip schrieb: > Aber warum so einen "riesen" Prozessor, wenn alles für eine mega8 > fertig ist? Hab im moment keinen anderen und bei uns in Südtirol gibt es leider nur einen Elektronikladen der nur einen pic führ sowie ein paar andere kleinigkeiten und ich nicht extra einen bestellen möchte da der mindestbestellwert nicht gerade niedrig ist. Tip schrieb: > ein paar Registerbezeichnungen anpassen > mußt Gibt es da irgendwo seiten wo steht wo welche register verwendet werden? Eigentlich hab ich auch nur da das problem da ich nicht weiß welches register ich ändern müsste. Wenn mir da jemand tipps geben könnte wäre ich schon glücklich Mfg Peter
>Wenn mir da jemand tipps geben könnte wäre ich schon glücklich
Mit "Tips" ist Dir da, meiner Ansicht nach, nicht weitergeholfen.
Du müsstest erstmal grundlegend die beiden Prozessoren verstehen, was
aber nicht ganz so umfangreich ist, weil die beiden sich sehr ähneln.
Wenn Du mit denen noch garnichts zu tun hattest oder auch garkeine
Ahnung von C hast, musst Du das erstmal lernen.
Dann musst Du gucken, welche Register in dem ursprünglichen Programm
verwendet werden und wozu. Dann die gleiche Peripherieeinheit im
Zielprozessor nachlesen und gucken, welches Bit in welchem Register die
äquivalente Funktion erfüllt.
Tut mir leid: Es gibt keine Abkürzung.
Peter L. schrieb: > Hab im moment keinen anderen [...] ich nicht extra einen bestellen > möchte da der mindestbestellwert nicht gerade niedrig ist. Suche dir hier einen Versender aus, der günstig nach AT verschickt. Elektronikversender
Was hast du denn außer dem Prozessor: - Programmieradapter ( ) - Brennprogramm ( ) - C-Compiler ( ) Hast du das Programm schon für den ATmega8 kompiliert? Hast du versucht, das Programm für den ATmega8535 zu kompilieren? Kommen da Warnungen/Fehlermeldungen (welche)? Sag, wo es genau hakt, dann kann dir geholfen werden. Vermutlich sind die Prozessoren sogar ähnlich genug, dass man da gar nichts ändern muß.
Es gibt schon eine Abkürzung. Einfach mal versuchen das Programm in den 85835 zu schreiben. PB4 dürfte beim 8535 auch PB4 sein. Wenn der Quellcode vorhanden ist, dann mal versuchen das Programm neu zu kompilieren mit Angabe des neuen Prozessors. Anhand der Fehlerliste vom Kompiler wird man erkennen können, was der Kompiler nicht verstanden hat. Ansonsten sind die Tipps hier im Forum in gewissem Sinne Unsinn. Niemand muss z.B. Jura studieren, nur weil jemand einen Paragrafen hinterfragt.
Alexander Schmidt schrieb: > Suche dir hier einen Versender aus, der günstig nach AT verschickt. Wenn du mit AT Österreich meinst dann bist du nicht ganz auf dem neuesten Stand: Südirol gehört seit einigen Jahren (seit 1918) zu Italien (leider). Sind diese Versandhäußer auch verlässlich? Hab da schon einiges an erfahrung gesammelt. Rainer schrieb: > Was hast du denn außer dem Prozessor: > - Programmieradapter ( ) > - Brennprogramm ( ) > - C-Compiler ( ) > > Hast du das Programm schon für den ATmega8 kompiliert? > Hast du versucht, das Programm für den ATmega8535 zu kompilieren? > Kommen da Warnungen/Fehlermeldungen (welche)? > > Sag, wo es genau hakt, dann kann dir geholfen werden. > Vermutlich sind die Prozessoren sogar ähnlich genug, dass man da gar > nichts ändern muß. Zum Programmieren nutzte ich den LPT port. Zum Brenner benutzte ich AvrDude da das AVR-Studio den parallelprogrammer nicht unterstützt. Als C-Compiler benutze ich WinAvr Probier nochmal das programm zu kompilieren kann mich aber erinnern dass 2 o. 3 fehlermeldungen erschienen sind. (Melde mich gleich mit dem ergebnis) Das programm hab ich auch mal direkt geflasht (das mega8) und an den richtigen pins des mega8535 angesteckt leider ohne funktion Mfg Peter
Wenn ich auf Build klicke dann kommt nur eine Warnung (siehe bild) Klicke ich auf Compile dann sagt er succeed with 0 Warnings mfg Peter
Nach ersetzen von TIM1_OVF_vect mit TIMER1_OVF_vect lässt es sich auf jeden Fall kompilieren:
1 | :>make all |
2 | |
3 | -------- begin -------- |
4 | avr-gcc (GCC) 4.3.3 |
5 | Copyright (C) 2008 Free Software Foundation, Inc. |
6 | This is free software; see the source for copying conditions. There is NO |
7 | warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
8 | |
9 | |
10 | Compiling: flightlight_mega8.c |
11 | avr-gcc -c -mmcu=atmega8535 -I. -gstabs -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=flightlight_mega8.lst -std=gnu99 -Wp,-M,-MP,-MT,flightlight_mega8.o,-MF,.dep/flightlight_mega8.o.d flightlight_mega8.c -o flightlight_mega8.o |
12 | |
13 | Linking: flightlight_mega8.elf |
14 | avr-gcc -mmcu=atmega8535 -I. -gstabs -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=flightlight_mega8.o -std=gnu99 -Wp,-M,-MP,-MT,flightlight_mega8.o,-MF,.dep/flightlight_mega8.elf.d flightlight_mega8.o --output flightlight_mega8.elf -Wl,-Map=flightlight_mega8.map,--cref -lm |
15 | |
16 | Creating load file for Flash: flightlight_mega8.hex |
17 | avr-objcopy -O ihex -R .eeprom flightlight_mega8.elf flightlight_mega8.hex |
18 | |
19 | Creating load file for EEPROM: flightlight_mega8.eep |
20 | avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" \ |
21 | --change-section-lma .eeprom=0 -O ihex flightlight_mega8.elf flightlight_mega8.eep |
22 | avr-objcopy: --change-section-lma .eeprom=0x00000000 never used |
23 | |
24 | Creating Extended Listing: flightlight_mega8.lss |
25 | avr-objdump -h -S flightlight_mega8.elf > flightlight_mega8.lss |
26 | |
27 | Creating Symbol Table: flightlight_mega8.sym |
28 | avr-nm -n flightlight_mega8.elf > flightlight_mega8.sym |
29 | |
30 | Size after: |
31 | flightlight_mega8.elf : |
32 | section size addr |
33 | .text 306 0 |
34 | .bss 2 8388704 |
35 | .stab 1260 0 |
36 | .stabstr 1742 0 |
37 | Total 3310 |
38 | |
39 | |
40 | |
41 | Errors: none |
42 | -------- end -------- |
Das hört sich doch schon vielversprechend an. Ändere TIM1_OVF_vect in TIMER1_OVF_vect wie von Daniel vorgeschlagen (das meint das selbe). Beim WinAVR muß es TIMER1_OVF_vect heißen (auch beim ATmega8). Dann sollte das auch bei dir ohne Fehler und Warnungen durch den Compiler gehen. Mit dem Hex-File müßte es dann besser funktionieren.
Bei mir kommt mit der änderung auch keine fehlermeldung mehr. ich flash mal gleich den controller und dann mal schauen Mfg Peter
Habs jetzt probiert aber funktioniert immer noch nicht (fehlt doch mehr) Mfg Peter
Betreibst du deinen Prozessor mit dem richtigen Quarztakt? Das Programm ist anscheinend fest für einen 1 MHz-Takt geschrieben. Für andere Prozessorgeschwindigkeiten müssen im Programm die Zeitkonstanten für die Umschaltung zwischen den Befeuerungsarten angepaßt werden. Gruß Rainer
Damit das Programm richtig funktioniert, muß entweder die Compileroptimierung ausgeschaltet werden oder die Variable "value" muß als volatile deklariert werden, damit die Kommunikation zwischen ISR und Hauptprogramm funktioniert, also #include <inttypes.h> #include <avr/io.h> #include <avr/interrupt.h> volatile uint16_t value; ISR (TIMER1_OVF_vect) ...
Rainer schrieb: > Hast du ein Servo-Steuersignal an PD.2 anliegen? Hab da das Signal von meinem Empfänger anliegen (bei Atmega8535 ist Int0/PD2 pin16 und beim mega8 pin4 aber das dürfte doch egal sein oder?) Rainer schrieb: > Betreibst du deinen Prozessor mit dem richtigen Quarztakt? Das Programm > ist anscheinend fest für einen 1 MHz-Takt geschrieben Hab nichts geändert der Controller arbeitet mit keinem externen Quarz. Hab immer die "Grundeinstellung" genutzt Rainer schrieb: > Damit das Programm richtig funktioniert, muß entweder die > Compileroptimierung ausgeschaltet werden oder die Variable "value" muß > als volatile deklariert werden Probiere das mal gleich und gebe bescheid obs funktioniert oder nicht! Mfg Peter
Hab das Programm jetzt geflasht und es funktioniert (so halb). Es leuchten die LEDs sobald ich das signal anstecke jedoch kann ich es nicht steuern (hab an meiner graupner mx-12 nur einen 2 Stufenkippschalter habs aber mit dem Gasknüppel probiert). Möchte mich mal bei denjenigen bedanken die mir geholfen haben und mich somit ein stückchen weiter Richtung Ziel gebracht haben. Mfg Peter
So, habe mich entschlossen jetzt doch meinen eigenen Code zu machen. Da ich aber auf meine graupner mx-12 keinen 3-Stufen Schalter habe möchte ich es so machen (hab einen Taster bei der Mx-12), dass wenn ich den Knopf einmal drücke sollen die Positionslichter angehen, drücke ich ein zweites mal dann sollen die Blitzer einschalten (positionslichter bleiben an) drücke ich ein drittes mal so sollen die Landesheinwerfer einschalten und wenn ich ein 4. mal drücke dann sollen alle Lichter ausschalten. Kann mir vlt. jemand erklären wie das mit dem Timer realisierbar wäre(oder sogar einfacher)? (so wie der Code im moment war hab ich ihn ja schon so halbwegs verstanden aber wie soll ich das machen dass er nur dann zählt wenn ich einen Taster drücke? Kann man dem Controller einfach sagen ,dass wenn ein High am signal ist soll er eine Aktion ausführen und wenn dann nochmal gedrückt wird (noch ein High) dann zählt er eines dazu und führt die nächste aktion aus) Mfg Peter
Der Timer mißt nur die Länge des Steuerimpulses aus und legt den Wert in "value" ab. Für eine Tastfunktion müstest du z.B. jedesmal, wenn sich die gemessene Impulsdauer von "lang" auf "kurz" ändert, eine Variable erhöhen (und beim Erreichen von 4 direkt auf 0 zurücksetzen). Damit kannst du dann die LED-Ausgänge steuern. Aber kannst du nicht den Flaps-Kanal auf Proportionalbetrieb umstellen und damit die Befeuerung steuern? Oder geht der immer gleich wieder in die Ruhestellung wenn man die Wippe los läßt (ich kenne die MX-12 nicht)? Gruß Rainer
@Rainer so hab ich das auch gemeint, dass immer wenn man den Taster drückt zählt er eines dazu und beim vierten springt er wieder auf 0. Auf der Mx-12 gibt es zwei Trimmer mit flaps funktion.(gleiche trimmer wie für die Ruder regelung) Würde das schon probieren hab aber keine idee welcher kanal das ist(beim empfänger). Hab bei meinem kleinen modell (Cessna, elektro) an dem ich gerade das probiere nur einen 4 Kanal empfänger aber an meinem anderen Modell (Edge540) hab ich einen 8-Kanal Empfänger. Mfg Peter
Häng doch einfach mal einen Servo der Reihe nach an alle Empfängerkanäle ran. Der sollte auf die Flaps-Einstellung reagieren.
werde es sobald meine fernsteuerung wieder geladen ist testen. Mfg Peter
Ja mit der Flapseinstellung kann ich den Servo steuern. Außerdem funktioniert es auch mit den Lichtern die aber nur leuchten d.h. nicht blinken. hab beim Versuchsaufbau für jede der 3 verschiedenen Arten (positionslicht,blitzer,landescheinwerfer) eine Led drangehängt die aber je nach in wlcher stellung der Trimmer ist, gar nicht lauchten (trimmer ganz unten), eine led leuchtet (trimmer mitte), oder beide leuchten (trimmer oben) Da fehlts doch dem Programm oder? Mfg Peter
Probier den angehängten Hex-File mal aus. Der ist für den mega8535 mit 1 MHz kompiliert. Pin Belegung: Eingang: Servosignal PD2 LED-Ausgänge: Posi PB1..PB3 Blitz PB4, PB5 Doppelblitz PB6, PB7 Landelicht PD0, PD1, PD3..PD7 MfG Rainer
Hey cool danke jetzt funktionierts perfekt. Lags wirklich nur an der Frequenz, dass das Blinken nicht ging? Werde jetzt selber nochmal der idee von oben nachgehen (mit dem Taster) und das probieren zu schreiben. Mfg Peter
Die ganzen Zeitkonstanten für den Blitzablauf habe ich geändert. Damit die Ablaufgeschwindigkeit unabhängig vom Prozessor wird - ich habe hier auf einem mega168 mit 20 MHz getestet - verwende ich die Funktion _delay_ms() und habe mir für die Lesbarkeit ein paar Konstanten für die Bitmuster definiert. #include <util/delay.h> ... #define LIGHT_POSI _BV(PB1) | _BV(PB2) | _BV(PB3) #define LIGHT_WHITE _BV(PB6) | _BV(PB7) ... // Timing in milliseconds #define TIME_FLASH 20 // Flash duration ( 3000) #define TIME_GAP 100 // Gap between white flashes ( 3000) #define TIME_DELAY 200 // Delay white -> red flash (10000/50000) #define TIME_PAUSE 800 // Pause for flashing lights (50000) ... PORTB = LIGHT_POSI | LIGHT_WHITE; // position+whiteflash pins on (207) _delay_ms(TIME_FLASH); // wait "on" time ... Mfg Rainer
Danke nochmal. So sieht der Code von mir aus gesehen auch übersichlicher aus als der alt Mfg Peter
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.