Forum: Mikrocontroller und Digitale Elektronik impulslängenanzeige mit PIC


von Enrico L. (zassi)


Lesenswert?

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

von Franz (Gast)


Lesenswert?

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

von Sascha (Gast)


Lesenswert?

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.

von Chris (Gast)


Lesenswert?

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.

von Bernd R. (Firma: Promaxx.net) (bigwumpus)


Lesenswert?

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!

von Enrico L. (zassi)


Lesenswert?

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

von Enrico L. (zassi)


Lesenswert?

keiner mehr ne idee oder bietet sich niemand mehr an? ...
Schade

von holger (Gast)


Lesenswert?

>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 ;)

von Karl H. (kbuchegg)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Enrico L. (zassi)


Lesenswert?

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

von Bernd R. (Firma: Promaxx.net) (bigwumpus)


Lesenswert?

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...

von Peter D. (peda)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Enrico L. (zassi)


Lesenswert?

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

von funky (Gast)


Lesenswert?

Alter Schwede :D

Peter begeistert mich immer wieder ^^
Ein Programm was etwas sinnvolles tut und nichtmal eine 
if-Abfrage...respekt!!!

von Peter D. (peda)


Lesenswert?

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

von Josef B. (crunchix)


Lesenswert?

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.

von funky (Gast)


Lesenswert?

boaaar...war klar das wieder sowas kommt...
(und sowas steht in dem fall für klugscheißerkommentar)

von Enrico L. (zassi)


Lesenswert?

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. ;)

von Bernd R. (Firma: Promaxx.net) (bigwumpus)


Lesenswert?

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...

von Enrico L. (zassi)


Lesenswert?

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

von Enrico L. (zassi)


Lesenswert?

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
Noch kein Account? Hier anmelden.