Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Attiny 2313-przełącznik audio - rozłącza wejście

SGSGSG3 18 Gru 2016 11:07 645 3
  • #1 18 Gru 2016 11:07
    SGSGSG3
    Poziom 2  

    Witam, zwracam sie z prośba o pomoc w modyfikacji programu do przełącznika sygnałów audio.Program ten stworzony był w arduino :

    1. /*
    2. Automatyczny przełącznik audio
    3. autor: Daniel Turbasa
    4. data: 18-02-2014
    5. */
    6.
    7. int LED = 10;
    8. #define MUXA 14
    9. #define MUXB 15
    10. #define WE 9
    11. #define czas 3000
    12.
    13. v12.oid setup() //konfiguracja wejść oraz wyjść układu
    14. {
    15. pinMode(10, OUTPUT);
    16. pinMode(11, OUTPUT);
    17. pinMode(12, OUTPUT);
    18. pinMode(13, OUTPUT);
    19. pinMode(MUXA, OUTPUT);
    20. pinMode(MUXB, OUTPUT);
    21. pinMode(WE, INPUT);
    22. }
    23.
    24. void fMUX() //funkcja badająca stan sygnału wyjściowego
    25. {
    26. if ( digitalRead(WE) == HIGH ) //dalsza część instrukcji dostępna po wystąpieniu stanu wysokiego
    27. {
    28. digitalWrite(LED, HIGH); //zapalenie diody LED odpowiedniego wejścia
    29. do //pętla nieskończona - stan niski, utrzymujący się dłużej niż czas zadeklarowany w funkcji delay(), wstrzymuje działanie
    30. {
    31. do {} while ( digitalRead(WE) == HIGH ); //pętla - oczekiwanie mikrokontrolera na wystąpienie stanu niskiego
    32. delay(czas); //czas oczekiwania na ponowne pojawienie się sygnału
    33. if ( digitalRead(WE) == LOW ) //wyjście z nieskończonej pętli przy stanie niskim
    34. {
    35. break;
    36. }
    37. } while(1);
    38. digitalWrite(LED, LOW); //zgaszenie diody LED odpowiedniego wejścia
    39. }
    40. }
    41.
    42. void loop() //główna pętla programu
    43. {
    44. do
    45. {
    46. for(LED = 10; LED < 14; LED++) //pętla wybierająca pin sterujący diodą LED
    47. {
    48. switch(LED) //wybór wejść multipleksera
    49. {
    50. case 10:
    51. digitalWrite(MUXA, LOW); //sygnał sterujący multiplekserem
    52. digitalWrite(MUXB, LOW); //sygnał sterujący multiplekserem
    53. break;
    54. case 11:
    55. digitalWrite(MUXA, HIGH);
    56. digitalWrite(MUXB, LOW);
    57. break;
    58. case 12:
    59. digitalWrite(MUXA, LOW);
    60. digitalWrite(MUXB, HIGH);
    61. break;
    62. case 13:
    63. digitalWrite(MUXA, HIGH);
    64. digitalWrite(MUXB, HIGH);
    65. break;
    66. default:
    67. break;
    68. }
    69. delay(50); //opóźnienie przełączania
    70. fMUX(); //przejście do funkcji sterującej pracą multipleksera
    71. }
    72. } while(1);
    73. }


    Program działa ,lecz nie blokuje wejścia. Sygnał podany jest np. na wejście 1, dioda zapala się wejście jest aktywowane, lecz po zaniku sygnału sie rozłacza i dioda gaśnie a chodzi Mi o to aby wejscie to sie blokowało (aktywne nawet po zaniku sygnału) do czasu pojawienia sie sygnału na kolejnym wejściu. Kombinowałem z róznymi czasami opóznienia ale to nie to. Nadmieniam iz jestem poczatkujacym w mikrokontrolerach. Dziekuje za pomoc.

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    0 3
  • #3 19 Gru 2016 08:02
    SGSGSG3
    Poziom 2  

    Dziekuje za zainteresowanie, faktycznie zapomniałem schematu:


    Attiny 2313-przełącznik audio - rozłącza wejście

    0