www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik impulslängenanzeige mit PIC


Autor: Enrico Liebscher (zassi)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Franz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sascha (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bernd Rüter (Firma: Promaxx.net) (bigwumpus)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Enrico Liebscher (zassi)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Enrico Liebscher (zassi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
keiner mehr ne idee oder bietet sich niemand mehr an? ...
Schade

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Enrico Liebscher (zassi)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bernd Rüter (Firma: Promaxx.net) (bigwumpus)
Datum:

Bewertung
0 lesenswert
nicht 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=p...

Aber ich strick Dir mal ein Programm zurecht...

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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:
/*
Funktion:
LED1=600-750us
LED2=750-900us
LED3=900-1050us
LED4=1050-1200us
LED5=1200-1350us
LED6=1350-1500us
LED7=1500-1650us
LED8=1650-1800us
LED9=1800-1950us
LED10=1950-2100us
LED11=2100-2250us
LED12=2250-2400us
*/

// Target: ATTiny2313

// Input Pin:  PD4
// Output Pins: PD3..PD0, PB7..PB0

#define  F_CPU  8e6            // 8MHz (internal RC-osc)

#include <util\delay.h>
#include <avr\io.h>


int main( void )
{
  DDRB = 0xFF;    // 8 outputs
  DDRD = 0x0F;    // 4 outputs
  
  for(;;){
    uint16_t srg;

    while( PIND & 1<<PD4 );     // wait until low
    while( !(PIND & 1<<PD4));   // wait until high
    _delay_us( 600 );
    if( !(PIND & 1<<PD4)){
      PORTB = 0;                // LEDs off
      PORTD = 0;
      continue;                 // pulse to short, next try
    }
    for( srg = 1;; srg <<= 1 ){
      _delay_us( 150 );
      if( !(PIND & 1<<PD4)){
        PORTB = srg;            // lower 8 LEDs
        PORTD = srg >> 8;       // upper 4 LEDs
        break;                  // next try
      }
      if( srg & 0x0800 ){       // time to long
        PORTB = 0;              // LEDs off
        PORTD = 0;
        break;                  // next try
      }
    }
  }
}


Peter

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier noch ein bischen optimiert:
/*
Funktion:
LED1=600-750us
LED2=750-900us
LED3=900-1050us
LED4=1050-1200us
LED5=1200-1350us
LED6=1350-1500us
LED7=1500-1650us
LED8=1650-1800us
LED9=1800-1950us
LED10=1950-2100us
LED11=2100-2250us
LED12=2250-2400us
*/

// Target: ATTiny2313

// Input Pin:   PD4
// Output Pins: PD3..PD0, PB7..PB0 = LED12..LED1

#define F_CPU   8e6             // 8MHz (internal RC-osc)

#include <util\delay.h>
#include <avr\io.h>


int main( void )
{
  DDRB = 0xFF;                  // 8 outputs
  DDRD = 0x0F;                  // 4 outputs

  for(;;){
    uint16_t srg;

    while( !(PIND & 1<<PD4));                   // wait until high
    for( srg = 1; PIND & 1<<PD4; srg <<= 1 ){   // loop until low
      _delay_us( 150 );
    }
    PORTB = srg >> 4;           // lower 8 LEDs
    PORTD = srg >> 12;          // upper 4 LEDs
  }
}


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

Autor: Enrico Liebscher (zassi)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: funky (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alter Schwede :D

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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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_Sys...


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

Autor: Josef Balom (crunchix)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: funky (Gast)
Datum:

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

Autor: Enrico Liebscher (zassi)
Datum:

Bewertung
0 lesenswert
nicht 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. ;)

Autor: Bernd Rüter (Firma: Promaxx.net) (bigwumpus)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Enrico Liebscher (zassi)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Enrico Liebscher (zassi)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.