Software C für Hardware



  • Hallo leute,

    ich weiß nicht, ins welche forum ich meinen beitrag
    schreiben sollte..

    s geht um folgendes:

    ich soll per software-programmierung einen signal generator
    programmieren, also sozusagen auf einer hardware. dabei gibt s mehrere anforderungen:

    1. verschiedene signalverläufe (also zeitmäßig von min. 8ms bis 128ms)
    2. eine zeitspanne soll variabel einstellbar sein
    3. soll über den rx-ausgang ausgegeben werden (im mom nicht so wichtig)

    um nochmal alles genauer zu erläutern:

    ich habe einen 4bit schalter mit dem ich 16zustände generieren könnte.
    den schalter also einlesen, welche stellung er hat und dann sozusagen
    die bestimmten signalverläufe ausgeben, nachdem ein anderer druck-knopf
    (dahinter muss noch eine entsprell funktion hinterlegt werden)
    aussenden.

    wie kann ich dieses nun programmieren?

    ich weiß, ich brauche drei funktionen:

    1.schalter einlesen und überprüfen
    2.signal auf ausgang legen
    3.abfragen, ob der drucktaster gedruckt wurde und dann entprellzeit
    beachten

    nochmal zu den zeitverläufen:

    sollte der drucktaster betätigt werden, muss erst 8ms ein LOW-Signal und
    anschließend min 8ms HIGH-Signal..dieses ist variabel und somit hinter
    dem SWITCH-Schalter abgelegt.

    ein beispiel: ist der switchschalter auf 0000, dann liefert er mir die
    zeit 8ms(LOW) und dann 8ms(HIGH). ist er auf 0001, dann 8ms (LOW) und
    16ms(HIGH). 0010 = 8ms+24ms usw.

    ich hoffe, einer von euch kann mir helfen..



  • naja, entweder mit verzögerungsschleifen oder mit 'nem timer. wieso soll denn die pause immer 8ms sein?
    🙂



  • also, s muss nicht immer 8ms sein..die ersten 8ms, die auf LOW sind, müssen bzw. sind vorgegeben..

    mit der aufteilung von 8ms habe ich mir nur gedacht, dass dies dann einfacher wäre, wenn man eine wiederholbare zeit hat..

    wie würden denn die verzögerungsschleifen aussehen??

    also, ich habe mir schon überlegt, dass ich eine schleife mache, die
    meinetwegen meine funktionen alle 2ms aufruft..dies ist schon
    vorgegeben..dann muss ich halt die funktionen schreiben..

    den schalter kann ich ja mit hilfe von if-else abfragen oder gibts da
    etwas einfacheres??

    und dann in den verschiedenen abzweigungen meine andere funktion
    abfragen..bitte hilfe..



  • ungefähr so:

    void delay_ms (int ms)
    {
      // hier code zum warten einfügen
    }
    ...
    int get_key_vaklue (void)
    {
      // hier den schalter auslesen
      return ...;
    }
    ...
    for (;;)
    {
       low();  // low signal ausgeben
       delay_ms (8+get_key_value());  // wartet 8 ms + schalterwert
       high();  // high signal ausgeben
       delay_ms (8+get_key_value());  // wartet 8 ms + schalterwert
    }
    

    dan haste immer gleiches puls/pausen verhältnis.
    🙂



  • danke für die hilfe..ich werde mir mal die sache angucken und berichten..

    eine frage hätte ich aber noch: wie kann ich am einfachsten den schalter auslesen?? ich habe dies ja mit einer if-else verzweigung gemacht, aber da brauche ich ja 16 abfragen..

    und wie kann ich einen timer für 1ms programmieren?? oder kennt sich einer aus mit timer von 8kHz die entsprechenden werte zu ermitteln??



  • PiotreD schrieb:

    eine frage hätte ich aber noch: wie kann ich am einfachsten den schalter auslesen?? ich habe dies ja mit einer if-else verzweigung gemacht, aber da brauche ich ja 16 abfragen..

    lies den schalter als byte ein und/oder shifte bzw. odere dir das so zurecht, dass die 4 bits die unteren bist eines bytes sind, dann hast du einen wert 0...15, mit dem sich's leicht arbeiten lässt.

    PiotreD schrieb:

    und wie kann ich einen timer für 1ms programmieren?? oder kennt sich einer aus mit timer von 8kHz die entsprechenden werte zu ermitteln??

    das kommt auf deine hardware an. guckst du ins user-manual. wo soll das laufen?
    🙂


Anmelden zum Antworten