Odjechani.com.pl

Pełna wersja: Nie na temat.
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Stron: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
U mnie nic nie pada, śniegu nie widziałem od miesiąca.
Nie wiem co za głupi ***** wymyśla takie łatanie dróg po zimie, ale ostatnio drogowcy chyba stosują nową metodę. Otóż łata nie jest wyrównana z nawierzchnią, tworzy lekki garb i jak po tym jedziesz, to *****, jakby pod kołami był bruk. Geniusze po prostu. Wycinają, łatają, a po tygodniu i tak się rozpadnie tworząc dziurę.
Robią tak, by znów mieć co łatać...
[Obrazek: oXXZKR3.png]

I 1669 kliknięć...
Reklamy mamy tylko w dwóch miejscach, w sumie 3 bannery, więcej nie dam, bo nie chcę zaśmiecać strony. Banery w postach są praktycznie tak samo skuteczne co w nagłówku, tyle, że w postach są dwa jednocześnie.
(01.04.2016, 15:43)Swordancer napisał(a): [ -> ][Obrazek: oXXZKR3.png]

I 1669 kliknięć...

No i ja się pytam gdzie mój długopis kuhfa?
Jak ktoś uczy się programowania mikrokontrolerów, napisałem kod pod MS430 do grania muzyczki na buzerze i go opisałem. 



/*
Copyright Odjechani.com.pl © 2016
Glosnik podłączamy pod pin P2.3

Potrzebne nuty (w przybliżeniu):

Domyślne ustawienia MCLK, to 1,05Mhz więc,

525000/f = cykle (w przybliżeniu +- do 0.5 ze względu na zaokrąglenie)

Porzebne nuty:

G5 - 783.991Hz = 670
F5 - 698.456Hz = 752

D5# - 622.254Hz = 844
D5 - 587.330Hz = 894
C5 - 523,251Hz = 1003
B4 - 493.883Hz = 1063

G4# - 415.305Hz = 1264
G4 - 391.995Hz = 1339
F4 - 349.228Hz = 1503
D4# - 311.127Hz = 1687
D4 - 293.665Hz = 1787
C4 - 261.626Hz = 2007
G3 - 195.998Hz = 2679
C3 - 130.813Hz = 4013

*/

#include <msp430g2553.h>

#define LS BIT3; //deklaracja pinu dla zasilania głośnika

unsigned int length = 129; // długość utworu, należy zmienić na długość tablicy

//Daredevil's Main theme by John Paesano - krótki przykładowy fragment. Długość tablicy - 129 liczby

//ton dźwiękowy generowany na timerze 0 A0 (0 przerwa)
unsigned const tone[] = {1339,1687,1787,2007,1339,1687,1787,2007,1339,1687,1787,2007,1339,1687,1787,2007,1264,1687,1787,2007,1264,1687,1787,2007,1264,1687,
1787,2007,1264,1687,1787,2007,1264,1687,1787,2007,1264,1687,1787,2007,1264,1687,1787,2007,1264,1687,1787,2007,1339,1687,1787,2007,1339,1687,1787, 2007,1339,1687,1787,2007,1339,1687,1787,2007,1687,1787,2679,1787,1339,1503,1503,0,1503,4013,4013,1687,0,844,894,1339,844,670,752,752,0,752,1003,0,1003,1063,894,670,0,
670,844,894,1003,670,844,894,1003,670,844,894,1003,670,844,894,1003,670,844,894,1003,670,844,894,1003,670,844,894,1003,1687,0,1687,0,1687,0,1687,0};

//czas odgrywanego tonu na timerze 0 A1 (musi być większy od zera)
unsigned const time[] = {8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,
8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,8000,
8000,8000,8000,8000,8000,8000,8000,8000,10000,25000,62000,12000,12000,16000,62000,20000,10000,25000,62000,20000,62000,40000,25000,62000,12000,12000,
16000,62000,20000,10000,25000,65000,10000,25000,25000,25000,62000,5000,5000,5000,5000,5000,5000,5000,5000,5000,5000,5000,5000,5000,5000,5000,5000,
5000,5000,5000,5000,5000,5000,5000,5000,5000,5000,5000,5000,5000,8500,5000,8500,30000,8500,5000,8500,62000};

unsigned int tone_change; //odliczanie do zmiany tonacji
unsigned int counter; //licznik wyboru tonacji w tablicy

//funkcja konfiguracji
void init(void) {

WDTCTL = WDTPW | WDTHOLD;

P2DIR |= LS; // P2.3 jako wyjście
P2OUT &= ~LS; //P2.3 stan niski

TA0CCTL0 = CCIE; //przerwanie TA0CCTL0
TA0CCTL1 = CCIE; //przerwanie TA0CCTL1

TA0CCR0 = tone[0]; //Timer0A0 ton pierwszy
TA0CCR1 = time[0]; //Timer1A0 dlugosc pierwszego tonu

TACTL = TASSEL_2 + MC_1 + TAIE + TACLR + ID_0; // SMCLK + UP MODE + Przerwania + Wyczyść timer + Nie dziel

_BIS_SR(GIE);

}

int main(void) {

init(); // inicjalizacja ustawień programu

while(1) {
}

}

#pragma vector = TIMER0_A0_VECTOR
__interrupt void TIMER0_A0(void)
{
P2OUT ^= LS; //zmiana stanu P2.3 pod sygnał prostokątny dla odgrywanej tonacji
if(P2OUT & BIT3 && TA0CCR0 == 0) {
P2OUT &= ~BIT3;
}
}


#pragma vector = TIMER0_A1_VECTOR
__interrupt void TIMER0_A1(void)
{
if(tone_change == time[counter]) {

//liczniki pomocnicze
counter++;
tone_change = 0;


if(counter == length) {
counter = 0; //zerowanie licznika pomocniczego

}

//kolejny ton i jego czas
TA0CCR0 = tone[counter];
TA0CCR1 = time[counter];

}
tone_change++; //licznik pomocniczy
}

Nie i wydaje mi się, że ze względu na rozmiar pamięci w mikrokontrolerach raczej kompilatory pod w pełni profesjonalne programowanie w C++ nie pojawią się prędko, a przynajmniej ja nie słyszałem. Mowa oczywiście o profesionalnym programowaniu, nie o jakimś Arduino itd. Można pisać w assemblerze, ale nie polecam. Są też kompilatory pod inne języki np. BASCOM, jednak C powinien wystarczyć do wszystkiego i jest najpopularniejszy, prosty, szybki, można nim programować większość mikrokontrolerów, dużo kompilatorów. Znając C++ znasz C, nie da się inaczej, oczywiście jest znacznie ograniczony w stosunku do C++, ale łatwo można wyłapać, czego nie da się używać w C. Znajomość języka C nie musi być wielka, programowaniu mikrokontrolerów najbardziej liczy się znajomść ich budowy, funkcji, umiejętności czytania dokumentacji, znajomość podstaw elektroniki. To nie jest jednaj prosta dziedzina i nauka w przeciwieństwie do pisania zwykłych programów na komputerze, zazwyczaj wymaga wkładów finansowych.
Stron: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44