Skocz do zawartości

Oskar_Zaremba

Użytkownicy
  • Zawartość

    12
  • Rejestracja

  • Ostatnio

Reputacja

0 Neutralna

O Oskar_Zaremba

  • Ranga
    2/10

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

  1. Okay:/ Już wiem jak zrobić i okres i wypełnienie:) #include <avr/io.h> int main(void) { DDRB = _BV(DDB2); // ustawienie pinu PB0 w stan wyjścia TCCR0A = _BV(COM0A0) | _BV(WGM01); // ustawienie generatora w tryb CTC TCCR0B = _BV(CS00); // wybór zegara z skalowaniem przez 1 OCR0A = 5; // ustawienie górnej wartości licznika DDRB |= _BV(DDB3) | _BV(DDB4); TCCR1A = _BV(COM1A1) | _BV(COM1B1) | _BV(COM1B0); TCCR1B = _BV(WGM13) | _BV(CS10); OCR1A = 5; OCR1B = 8; ICR1 = 10; } Przepraszam za przedwczesne pytania...Dopiero się uczę:/
  2. Eh:/ Tutaj przyznam się, że nie do końca wszystko rozumiem:/ Pisząc szczerze to jeszcze 3 tygodnie temu zaczynałem od 0 czytając o elementach biernych typu rezystor i widzę, że jeszcze ogrom wiedzy do zdobycia mnie czeka…☹Wracając do tematu. Tracę jeden kanał sprzętowego wyjścia tzn. pin przełączany przy przepełnieniu licznika zapewne, ale o co chodzi z tym drugim, gdzie mam okres i wypełnienie?? Widzę, że timer 16 bitowy ma różne rozdzielczości, ale czy można mu ustawić i okres, i wypełnienie jednocześnie? Widzę w tabeli generatora fali dla np. PWM, Phase and Freq Correct, że jako TOP jest podane albo ICR1 albo OCR1A, ale czy można ustawić oba tak żeby jeden rejestr trzymał wartość ustalająca częstotliwość a drugi wypełnienie? Trochę to wszystko zagmatwane:/ Czy mógłby Pan podpowiedzieć w jaki sposób mogę ustawić zarówno okres jak i wypełnienie PWM?? Z góry uprzejmie dziękuje
  3. Nie twierdziłem, że PWM to jedyny tryb pracy pinów. Pisałem tylko że częstotliwością sygnału PWM można sterować tylko przy użyciu prescalera. Teraz widzę, że rzeczywiście, jeśli ustawię WGM00 i WGM01 to mam np. generator ustawiony na fast PWN, a jeśli dodam do tego WGM02 i COM0A0 to będę miał fastPWM z przełączaniem przy przepełnieniu licznika po uzyskaniu wartości OCRnx tyle tylko że wtedy nie mam już możliwości sterowania wypełnieniem sygnału a skoro steruje i tak tylko samą częstotliwością to po co mi wtedy PWM z stałym wypełnieniem 50%. Przy ustawieniach, które podałem, czyli wykorzystaniu CTC mam mniej kodu. Tak jak pisałeś timer w trybie CTC, czyli WGM01 ustawiony a do przełączania wystarczy COM0A0 zamiast dodatkowych WGMów.
  4. To rozwiązało mój problem:) #include <avr/io.h> int main(void) { DDRB = _BV(DDB2); // ustawienie pinu PB0 w stan wyjścia TCCR0A = _BV(COM0A0) | _BV(WGM01); // ustawienie generatora w tryb CTC TCCR0B = _BV(CS00); // wybór zegara z skalowaniem przez 1 OCR0A = 1; // ustawienie górnej wartości licznika } Dziękuje za odpowiedzi.
  5. Widzę, że jedynym sposobem sterowania częstotliwością PWM jest używanie prescalera (1, 8, 64, 256, 1024) co w moim przypadku jest niewystarczające, ponieważ potrzebuję większej precyzji. W mojej głowie rodzi się teraz pytanie… Po co w trybie CTC jest możliwość tak dokładnego sterowania częstotliwością, skoro nie ma możliwości realnego tego wykorzystania?? Za każdym razem, kiedy sprawdzę którąś z flag i wykonam instrukcję tracę takty zegara więc czynności wykonywane przez program nie będą zgodne z częstotliwością (powyżej pewnej granicznej wartości) z podanego wzoru…:/
  6. PWM to dobry pomysł, ale z tego co pamiętam to można sterować w nim tylko współczynnikiem wypełnienia a ja potrzebuję wysterować konkretną wartość częstotliwości Rozumiem, że częstotliwość taktowania licznika jest wyrażona przez wzór, który podałem natomiast wykonanie instrukcji warunkowej plus czyszczenie flagi i przełączenie bitu portu zajmuje dodatkowe takty licznika. Te dodatkowe takty sprawiają, że przegapiam kilka przepełnień licznika, a więc przełączam port kilkukrotnie wolniej aniżeli częstotliwość zegara dobrze to rozumiem? Czy jest zatem jakiś sposób, żeby uzyskać na pinie PB0 częstotliwości wynikające z wzoru, który podałem? Chciałbym sterować wartością prescalera i wartością OCR0A tak żeby uzyskiwać wynikające z wzoru częstotliwości. W dalszym ciągu czytam datasheet tego mikrokontrolera i widzę, że w przypadku licznika 16bit tryb fast PWM można najprawdopodobniej sterować częstotliwością PWM. Za chwilkę spróbuję to wytestować
  7. Próbowałem to też zrobić na przerwaniach, ale bez skutecznie. Czy jest jakiś inny sposób, aby uzyskać potrzebną mi częstotliwość? A tak przy okazji jaka jest szybkość działania tej pętli while i gdzie można znaleźć tą informację??
  8. Dzień Dobry, Mam pytanie odnośnie programowania mikro kontrolerów. Zajmuję się akurat ATTINY2313A. Mam ustawiony wewnętrzny oscylator na częstotliwość 4 MHz bez wewnętrznego podziału zegara przez 8. Poniżej mój krótki kod w #include <avr/io.h> int main(void) { DDRB = _BV(DDB0); // ustawienie pinu PB0 w stan wyjścia TCCR0A = _BV(WGM01); // ustawienie generatora w tryb CTC TCCR0B = _BV(CS00); // wybór zegara z skalowaniem przez 1 OCR0A = 1; // ustawienie górnej wartości licznika while (1) { if (TIFR & _BV(OCF0A)) { // sprawdzenie czy w rejestrze TIFR ustawiona została flaga OCF0A po przepełnieniu licznika OCR0A TIFR |= _BV(OCF0A); // wyzerowanie flagi OCF0A poprzez ustawienie logicznej jedynki PORTB ^= _BV(DDB0); // przełączenie bitu na pinie PB0 } } } W moim przypadku według dokumentacji czyli wzoru poniżej: fOC0A=fclk_I/O/(2·N·(1+OCR0A)) fOC0A=4000000/(2·1·(1+1)) fOC0A=1000000=1MHz A teraz do meritum:) Co robię nie tak? Częstotliwość którą uzyskuję to --> 207.4KHz. W załączniku przesyłam zdjęcie z oscyloskopu z widocznym przebiegiem na pinie PB0. Pozdrawiam, Oskar Zaremba
  9. Tak przy okazji generatorów i syren:) Czy jest tu ktoś kto mógłby mi wytłumaczyć, jak działa poniższy układ?:) Jak działa każdy tranzystor, jakiego jest rodzaju tj. npn, pnp a ba nawet w jakim układzie pracuje OE, OC zdaje mi się, że wiem, ale jak analizować takie cuda od czego zacząć itd. pojęcia nie mam:/
  10. Dzień Dobry, Mam małą zagwozdkę odnośnie zmiennych globalnych. Bardzo proszę o wyjaśnienie mi poniższego prostego zresztą kodu: #include <RC5.h> #define TSOP_PIN 3 RC5 rc5(TSOP_PIN); byte address; byte command; byte toggle; int robotMode = 0; void setup() { Serial.begin(9600); } void loop() { if (rc5.read(&toggle, &address, &command)) { switch (command) { case 10: robotMode = 1; break; case 146: robotMode = 0; break; } Serial.println("Tryb pracy robota: " + String(robotMode) + " Tutaj widać zmieniona wartosc zmiennej globalnej!!!"); delay(300); } //Serial.println("Tryb pracy robota: " + String(robotMode) + " Tutaj nie widać zmienionej wartosci zmiennej globalnej!!!"); //delay(300); } W pierwszej kolejności proszę uruchomić kod w takiej postaci w jakiej go tutaj umieściłem a potem za komentować Serial i delay wewnątrz instrukcji if i od komentować Serial i delay poza instrukcją if. Dlaczego wewnątrz ciała instrukcji if zmienna ulega zmianie podczas gdy poza tą instrukcją ta zmiana nie obowiązuje?
  11. Dzień Dobry, Chciałbym wykorzystać piny ekspandera z sheildu robota dla ultradźwiękowego czujnika odległości. Powiedzmy, że chcę użyć pinu 7 i 6. W jaki sposób mogę się do nich odwołać tj. np. ustawić ich pinMode??
  12. Dzień Dobry, Chciałbym się dowiedzieć w jaki sposób działa Generator astabilny. Chodzi mi konkretnie o przełączanie diod czerwonej z zieloną. Rozumiem że na początku kiedy kondensator C3 nie jest naładowany to z nóżki 3 popłynie prąd przez diodę czerwoną powodując jej świecenie. Dzieje się tak jak sądzę z dwóch powodów: po pierwsze nie będzie różnicy potencjałów w gałęzi LED1 i R3 ponieważ z nóżki 3 będziemy w przybliżeniu mieli +6V i od baterii +6V, niema różnicy potencjałów (napięcia) prąd nie płynie, po drugie napięcie z nóżki 3 podawane jest do gałęzi LED1 i R3 w kierunku zaporowym diody LED1. Nie rozumiem dlaczego dioda LED2 nie świeci kiedy na nóżce 3 nie ma napięcia. Zarówno LED1, R3, R4 oraz LED2 zwarte są teraz do masy i to nie przez nóżkę 3 układu scalonego. Jeśli nóżka 3 w jakiś magiczny sposób przy jej stanie logicznym 0 zwiera się do masy to gdzie to jest ujęte na schemacie tego układu NE555??? Nóżkę 7 widzę na ten przykład że może się zewrzeć z masą kiedy załączy się tranzystor gdzie jest zatem połączenie do masy nóżki 3 przy stanie logicznym 0?
×
×
  • Utwórz nowe...