hallo, ich suche jemanden der mir für einen pic 16F628A ein kleines programm schreiben könnte.(.asm datei) Es geht darum über 12 LEDs die impuls zeit/position anzuzeigen. LED1=600-750ms LED2=750-900ms LED3=900-1050ms LED4=1050-1200ms LED5=1200-1350ms LED6=1350-1500ms LED7=1500-1650ms LED8=1650-1800ms LED9=1800-1950ms LED10=1950-2100ms LED11=2100-2250ms LED12=2250-2400ms Natürlich soll das ganze nicht nur für ein laues dankeschön von statten gehen. Ich zähl auf Euch ;-) (Einsatzgebiet: RC-Car/Modellbau) MfG Enrico
Hallo Enrico, Du musst Deine Aufgabe schon ein wenig mehr spezifizieren. - Auf welcher Hardware soll das laufen? - Soll die Hardware mitentwickelt werden? - Was gibt es für Eingänge? - ... Ausgänge und vor allem was soll wie gemessen werden ??? Du musst wissen, das die wenigsten Leute hier im Forum eine Glaskugel besitzen und meine ist gerade zur Reparatur eingeschickt :-) Gruß Franz
Das sieht mir doch stark nach ner Anzeige für ne Servoposition o.ä. aus. Ich gehe davon aus dass er mit ms µs meint, sonst macht das keinen Sinn. Im Prinzip könnte man das so machen: -> auf die steigende Flanke des Impulses warten -> 600µs warten -> wenn Puls noch high, erste Led an -> 150µs warten -> wenn Puls noch high, zweite led an -> 150µs warten -> ... -> wenn Impuls low von vorn beginnen.
Nimm einen 16f88, oder besser einen 14 pinner, dann kannst du ihn auch als Spannungsanzeige der Akkus verwenden. Für die Leds brauchst du 4 I/O, einen I/O für einen Poti sowie eine I für die Umschaltung als Servotester oder Impulslängenanzeiger, macht 6 pins, du könnstest auch einen 8pinner dafür verwenden. Wenn du noch einen Pin als Vref sowie einen für die Spannungsmessung verwendest, hättest du noch eine praktische Spannungsanzeige für Akkus.
Das Programm ist nicht das Problem. Ich schreibe es aber in PicBasic, da habe ich sowas ähnliches schon fertig. Prozessor ist mir eigentlich egal. Meld Dich!
nabend die herren ;) tut mir leid wenn ich nich ganz genau beschrieben habe worum es geht. Also JA es ist für das servo signal welches direkt in den pic gespeist wird, und dieser soll es dann auswertern und nur per led anzeigen (erstmal). Hintergrund der ganzen sache ist der. Das ich für meine autos eine brems und blink licht anlage einbauen möchte. Damit aber das brems/blink licht nicht gleich angeht wenn vielleich nur mal der servo zuckt, wollte ich das der pic mir erstmal die positionen anzeigt damit ich dann später die genauen impulszeiten als "on/off" signal verwenden kann so als beispiel soll bei 800 und weniger µs blinker links und bei 1600 und mehr blinker rechts an gehen. Und ja ich meine µs statt ms. Da es ja sonst 0,6ms-2,4ms wären ;) Zum pic, ich hab noch reichlich 16F627 und 16F628 da deswegen der IC wollte nicht erst neue kaufen müssen. Sollten noch fragen offen stehen helft mir bitte auf die sprünge MfG Enrico
>Zum pic, ich hab noch reichlich 16F627 und 16F628 da deswegen der IC >wollte nicht erst neue kaufen müssen. >keiner mehr ne idee oder bietet sich niemand mehr an? ... Für 2 Euro macht das halt keiner ;)
Enrico Liebscher schrieb: > keiner mehr ne idee oder bietet sich niemand mehr an? ... > Schade Keiner den Willen sich das bischen Programmieren, das dazu nötig ist, selbst beizubringen, um Impulslängen zu messen? Schade
Enrico Liebscher schrieb: > keiner mehr ne idee oder bietet sich niemand mehr an? ... > Schade Das liegt an Deinen gravierenden Einschränkungen. PIC-Assembler ist so ziemlich das aufwendigste, da er nur wenig Befehle hat und ne recht kryptische Syntax. Man würde also nur unnötig viel Zeit opfern und das für ne Sache, die man selber nicht braucht. Stell mal die Wahl der Programmiersprache (Bascom, C) und der MC-Familie (AVR, 8051, PIC) frei, das erhöht die Chancen drastisch. Peter
holger schrieb: >>Zum pic, ich hab noch reichlich 16F627 und 16F628 da deswegen der IC >>wollte nicht erst neue kaufen müssen. > >>keiner mehr ne idee oder bietet sich niemand mehr an? ... > > Für 2 Euro macht das halt keiner ;) wo bitte sagte ich das ich 2 euro zahle?... Karl heinz Buchegger schrieb: > Enrico Liebscher schrieb: >> keiner mehr ne idee oder bietet sich niemand mehr an? ... >> Schade > > Keiner den Willen sich das bischen Programmieren, das dazu nötig ist, > selbst beizubringen, um Impulslängen zu messen? > Schade machst du auch einen flugpilotenschein nur weil du mal mit dem flugzeug fliegen willst?... Peter Dannegger schrieb: > Das liegt an Deinen gravierenden Einschränkungen. > > PIC-Assembler ist so ziemlich das aufwendigste, da er nur wenig Befehle > hat und ne recht kryptische Syntax. > Man würde also nur unnötig viel Zeit opfern und das für ne Sache, die > man selber nicht braucht. > > Stell mal die Wahl der Programmiersprache (Bascom, C) und der MC-Familie > (AVR, 8051, PIC) frei, das erhöht die Chancen drastisch. > > > Peter ich sag mal so. ich habe die Pic's da und wie das programm geschrieben wird ist mir eigentlich egal. und wenn es einer direkt in hex schreibt... wichtig ist das es am ende funktioniert. Und wenn alle so selbst süchtig sind und nichts für andere machen wollen, dann sollen sich diese leute bitte auch garnicht erst melden. ich bin bereit dafür zu zahlen. Also ist sowas auch nicht vertane zeit. Wenn ich es könnte würde ich es selber machen. Ich möchte auch bitte das, dass hier nicht zur diskusion wird wieviel ich zu zahlen bereit wäre oder das eh keiner lust hätte das zu machen. wenn mir wer helfen kann und das auch will, bekommt er auch was für seine mühen. (Punkt) MfG
Bei uns im Shop gibt es z.B. ein Impulsmeßgerät für Servos: http://www.rc-tune.de/shop/product_info.php?info=p1345_MPX-MULTImate.html Aber ich strick Dir mal ein Programm zurecht...
Wie gesagt, PIC ist mir zu kompliziert. Auch habe ich keine PICs und keinen Compiler dafür. Auf nem AVR würde das in C so aussehen:
1 | /*
|
2 | Funktion:
|
3 | LED1=600-750us
|
4 | LED2=750-900us
|
5 | LED3=900-1050us
|
6 | LED4=1050-1200us
|
7 | LED5=1200-1350us
|
8 | LED6=1350-1500us
|
9 | LED7=1500-1650us
|
10 | LED8=1650-1800us
|
11 | LED9=1800-1950us
|
12 | LED10=1950-2100us
|
13 | LED11=2100-2250us
|
14 | LED12=2250-2400us
|
15 | */
|
16 | |
17 | // Target: ATTiny2313
|
18 | |
19 | // Input Pin: PD4
|
20 | // Output Pins: PD3..PD0, PB7..PB0
|
21 | |
22 | #define F_CPU 8e6 // 8MHz (internal RC-osc)
|
23 | |
24 | #include <util\delay.h> |
25 | #include <avr\io.h> |
26 | |
27 | |
28 | int main( void ) |
29 | {
|
30 | DDRB = 0xFF; // 8 outputs |
31 | DDRD = 0x0F; // 4 outputs |
32 | |
33 | for(;;){ |
34 | uint16_t srg; |
35 | |
36 | while( PIND & 1<<PD4 ); // wait until low |
37 | while( !(PIND & 1<<PD4)); // wait until high |
38 | _delay_us( 600 ); |
39 | if( !(PIND & 1<<PD4)){ |
40 | PORTB = 0; // LEDs off |
41 | PORTD = 0; |
42 | continue; // pulse to short, next try |
43 | }
|
44 | for( srg = 1;; srg <<= 1 ){ |
45 | _delay_us( 150 ); |
46 | if( !(PIND & 1<<PD4)){ |
47 | PORTB = srg; // lower 8 LEDs |
48 | PORTD = srg >> 8; // upper 4 LEDs |
49 | break; // next try |
50 | }
|
51 | if( srg & 0x0800 ){ // time to long |
52 | PORTB = 0; // LEDs off |
53 | PORTD = 0; |
54 | break; // next try |
55 | }
|
56 | }
|
57 | }
|
58 | }
|
Peter
Hier noch ein bischen optimiert:
1 | /*
|
2 | Funktion:
|
3 | LED1=600-750us
|
4 | LED2=750-900us
|
5 | LED3=900-1050us
|
6 | LED4=1050-1200us
|
7 | LED5=1200-1350us
|
8 | LED6=1350-1500us
|
9 | LED7=1500-1650us
|
10 | LED8=1650-1800us
|
11 | LED9=1800-1950us
|
12 | LED10=1950-2100us
|
13 | LED11=2100-2250us
|
14 | LED12=2250-2400us
|
15 | */
|
16 | |
17 | // Target: ATTiny2313
|
18 | |
19 | // Input Pin: PD4
|
20 | // Output Pins: PD3..PD0, PB7..PB0 = LED12..LED1
|
21 | |
22 | #define F_CPU 8e6 // 8MHz (internal RC-osc)
|
23 | |
24 | #include <util\delay.h> |
25 | #include <avr\io.h> |
26 | |
27 | |
28 | int main( void ) |
29 | {
|
30 | DDRB = 0xFF; // 8 outputs |
31 | DDRD = 0x0F; // 4 outputs |
32 | |
33 | for(;;){ |
34 | uint16_t srg; |
35 | |
36 | while( !(PIND & 1<<PD4)); // wait until high |
37 | for( srg = 1; PIND & 1<<PD4; srg <<= 1 ){ // loop until low |
38 | _delay_us( 150 ); |
39 | }
|
40 | PORTB = srg >> 4; // lower 8 LEDs |
41 | PORTD = srg >> 12; // upper 4 LEDs |
42 | }
|
43 | }
|
Falls Du keinen PIC-Assemblerfreak für teures Geld findest, der ATtiny2313 kostet bei CSD 0,95€ und den AVR-Compiler gibts kostenlos: http://sourceforge.net/project/showfiles.php?group_id=68108 Peter
Also ich bedanke mich erstmal ganz dolle bei den wenigen dir mir wirklich versuchen zu helfen. @peter wenn du mir jetzt noch sagst wie ich das programm in den atmel bekomme wäre ich überglücklich ^^ ich hab da mal was von gehört das man nur 5 dräte und 1-2 widerstände oder so bräuchte zum flashen... MfG
Alter Schwede :D Peter begeistert mich immer wieder ^^ Ein Programm was etwas sinnvolles tut und nichtmal eine if-Abfrage...respekt!!!
Enrico Liebscher schrieb: > @peter > wenn du mir jetzt noch sagst wie ich das programm in den atmel bekomme > wäre ich überglücklich ^^ http://www.mikrocontroller.net/articles/AVR_In_System_Programmer Prinzipiell sollte das Programm auch auf einem PIC-Compiler laufen. Man muß nur die Namen der Port- und Richtungsregister anpassen. Und die Delayfunktion schreiben, wenn der Compiler keine hat. Peter
funky schrieb: > Alter Schwede :D > > Peter begeistert mich immer wieder ^^ > Ein Programm was etwas sinnvolles tut und nichtmal eine > if-Abfrage...respekt!!! Naja, solltest dich mit Programmieren vielleicht doch etwas mehr auseinandersetzen. Die While-Schleife hat ja eine "IF" Abfrage while( !(PIND & 1<<PD4)); Ist nichts anderes wie ein IF Mit MPLab müsstest du das mini Prog auch in deinen PIC reinbekommen, du musst nur die Ports abändern. Habe es gerade an einem PIC18F4550 probiert, funktioniert wunderbar, ist super kompakt geschrieben. Wenn du so viele PIC rumliegen hast, gehe ich mal davon aus dass du einen Brenner für die hast und dann kannst du MPLab wahrscheinlich auch haben am sonsten lade dir die Studen Version von microchip runter.
boaaar...war klar das wieder sowas kommt... (und sowas steht in dem fall für klugscheißerkommentar)
HEY! Keine Stichelein. Das ist mein Treath! Danke. Ich bin zZ in Komunikation mit Bernd. Der mir eifrig versucht zu helfen. (danke nochmals) Das komische ist nur, seine hex files lassen sich bei mir nicht in das Brennproggi einlesen. Da kommt schon "Fehler in Bereichsprüfung" wenn ich das hex laden will. Ich benutze Brenner und Software von Sprut.de Ist ne echt gute Seite! Peter Dannegger schrieb: > Man muß nur die Namen der Port- und Richtungsregister anpassen. > Und die Delayfunktion schreiben, wenn der Compiler keine hat. > > > Peter Das Problem ist, das ich ehrlich gesagt nicht wüsste wo ich da suchen/anfangen soll. Datenblätter kann ich durchaus lesen und ein fertigen Code anpassen. Aber selbst Programmieren ist noch recht Schwer. Deswegen fragte ich ja alte Hasen wie euch um hilfe. ;)
Ja, mir fiel eigentlich auch nur ein, daß die Fehlermeldung des Brenn-Proggis aus dem Dunstkreis der Delphi-Umgebung kommt. Hast Du evtl. einen anderen PC zum proggen zur Verfügung ? Der Brenner kann nur am Parallelport betrieben werden ? Ich habe meinen ersten Versuche mit einem JDM-Programmer am COM-Port und der Software IC-Prog unternommen. Klappte eigentlich brauchbar, bis ich PIC18-CPUs einsetzte...
ich habs auf nem win xp, win 2k und win 98se rechner versucht. kommt immer die selbe fehlermeldung... andere hex files lassen sich problemlos brennen... gebrannt wird bei mir über druckerport
ok mein fehler! das servo signal ist ja nur zwischen 1 und 2 ms lang also sollte es zwischen LED1=600-750µs LED2=750-900µs LED3=900-1050µs LED4=1050-1200µs LED5=1200-1350µs LED6=1350-1500µs LED7=1500-1650µs LED8=1650-1800µs LED9=1800-1950µs LED10=1950-2100µs LED11=2100-2250µs LED12=2250-2400µs sein. also von 0.6ms bis 2.4ms
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.