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.

Licznik monet w Bascom AVR

coyotus 03 Lis 2016 11:21 5225 69
  • #31 03 Lis 2016 11:21
    2675900
    Użytkownik usunął konto  
  • #32 03 Lis 2016 14:51
    Orion045
    Poziom 11  

    Chodzi o 10 i 20 pin mikro kontrolera? Zapomniałem dorysować tam zasilanie i Gnd. Po poprawieniu. Czujnik na PB5. Nie wiem jeszcze jaki. Magnetyczny?Fotodioda?
    Jeszcze chce poprawić schemat - pomiędzy LCD i Attiny2313 chce dać wtyczkę i gniazdo i szukam na Eagle i nie mogę znaleźć. Przycisk, czujnik i LCD poza płytką był by.Dobrze teraz jest?Mam Wyświetlacz 16x2 z i2c jak go podłączyć?

  • #33 04 Lis 2016 20:48
    Orion045
    Poziom 11  

    Mam problem. Poskładałem według schematu. Zamiast czujnika dałem na razie drugi przycisk. Udało mi się wgrać program. Po uruchomieniu na wyświetlaczu pokazują mi się tylko kostki w pierwszej linii. W drugiej linii nic.Żadnych napisów mimo że w symulacji programu Bascom wszystko działa.Co jest źle?

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

  • #34 05 Lis 2016 22:22
    landy13
    Poziom 29  

    Orion045 napisał:
    Czujnik na PB5. Nie wiem jeszcze jaki. Magnetyczny?Fotodioda?
    Może transoptor szczelinowy? Licznik monet w Bascom AVR

    Orion045 napisał:
    Po uruchomieniu na wyświetlaczu pokazują mi się tylko kostki w pierwszej linii. W drugiej linii nic.
    Błędne podłączenie.

  • #36 05 Lis 2016 22:56
    landy13
    Poziom 29  

    Orion045 napisał:
    Na schemacie? Bo składałem według schematu.
    Nie na schemacie. W rzeczywistości. To typowe objawy braku inicjacji wyświetlacza. Może któryś przewód nie styka lub zamieniona kolejność.

  • #37 06 Lis 2016 11:58
    Orion045
    Poziom 11  

    Prawie wszystko działa tylko błąd w programie.Złotówki liczy jak grosze. Tu jest gdzieś błąd. Zmienić wortość z 1 na 100?

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

  • #38 06 Lis 2016 15:50
    emarcus
    Poziom 35  

    Orion045 napisał:
    Prawie wszystko działa tylko błąd w programie.Złotówki liczy jak grosze. Tu jest gdzieś błąd. Zmienić wortość z 1 na 100?
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    Przeanalizuj powyższy fragment:
    Jeżeli zmienna 'suma' w wyrażeniu (2) zawiera ilośc groszy, to liczona jej zawartośc - wszystkie składniki wyrażenia (1) winny byc przedstawione w tychsamych jednostkach (ta sama rozdzielczośc).
    Dla przykładu: Jeden metr i 6 cm to nie jest 7 cm !!!! - to jest 106 cm
    Zmienna 'wartośc' jest dekodowana z rutyny CASE; to dla nominałów złotowych winny one odpowiadac rzeczywistym rachunkom na przykład:

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    Skoryguj pozostałą częśc kodu

    e marcus

  • #39 07 Lis 2016 17:49
    Orion045
    Poziom 11  

    Udało mi się poskładać i wgrać program. Działa tylko muszę popoprawiać program. Przy dziesiątkach, setkach i tysiącach napis przesuwa się w prawo. Jak zrobić żeby stał w miejscu a tylko liczby wyświetlały by się po lewej - 0001 - jedności, 0010 - dziesiątki, i 0100 -setki. Grosze liczy dobrze - po 99 gr. wyskakuje 1 zł. w złotówkach.Przy wyświetleniu 10 zł. napis przesuwa się w prawo. Jak zrobić żeby się nie przesuwał? I jak zaprojektować płytkę?

  • #40 07 Lis 2016 18:19
    373522
    Użytkownik usunął konto  
  • #41 08 Lis 2016 10:04
    Orion045
    Poziom 11  

    Wszystko fajnie gra tylko nie wiem dlaczego po 655 zł mimo że jest 00 gr. po dodaniu 5 zł wyskakuje błąd - wyświetla 654 zł 64 gr . Tak jakoś. Przy wyświetleniu 10 zł przesuwa w prawo a przy 11 zł wraca na swoje miejsce , przy setce to samo. Jak wpisze zamiast > znak = to przy dziesiątce jest dobrze a przy setce nie.

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

  • #42 08 Lis 2016 10:27
    373522
    Użytkownik usunął konto  
  • #43 08 Lis 2016 10:54
    kamyczek
    Poziom 34  

    niveasoft napisał:
    Najszybciej powinno pomóc to ;)
    ..ale mógłbyś sam pomyśleć...


    Zdecydowanie lepiej zrobi jak pomyśli samodzielnie
    bo to co napisałeś nie działa poprawnie , poza tym ma sporo ograniczeń . Napisałeś to nie biorąc pod uwagę budowy mikrokontrolera i najgorzej jak można było . Czym mniejsze zmienne tym szybciej działa program , jak są 8 bitowe to super bo każde dodawanie , odejmowanie mnożenie to 1clk . Tu nie ma sensu robić dodawania 5000 do zmiennej groszy tylko dodać 5 do zmiennej złotówki całe liczenie powinno się znaleźć z robocie czytnika rozpoznaje 5pln to dodaje 5 do złotówek , rozpoznaje 20gr to dodaje 2 do dziesiątek groszy . Tu końcowym efektem pracy urządzenia powinno być 6 zmiennych jednobajtowych: tysiące, setki, dziesiątki , złote , dziesiątki gr i grosze . Samo wyświetlanie tego na lcd też jest proste , wstawiasz gdzie chcesz przecinek .

  • #44 08 Lis 2016 11:14
    373522
    Użytkownik usunął konto  
  • #45 08 Lis 2016 11:36
    dondu
    Moderator Mikrokontrolery Projektowanie

    kamyczek napisał:
    Zdecydowanie lepiej zrobi jak pomyśli samodzielnie
    bo to co napisałeś nie działa poprawnie , poza tym ma sporo ograniczeń . Napisałeś to nie biorąc pod uwagę budowy mikrokontrolera i najgorzej jak można było . Czym mniejsze zmienne tym szybciej działa program , jak są 8 bitowe to super bo każde dodawanie , odejmowanie mnożenie to 1clk . Tu nie ma sensu robić dodawania 5000 do zmiennej groszy tylko dodać 5 do zmiennej złotówki całe liczenie powinno się znaleźć z robocie czytnika rozpoznaje 5pln to dodaje 5 do złotówek , rozpoznaje 20gr to dodaje 2 do dziesiątek groszy . Tu końcowym efektem pracy urządzenia powinno być 6 zmiennych jednobajtowych: tysiące, setki, dziesiątki , złote , dziesiątki gr i grosze . Samo wyświetlanie tego na lcd też jest proste , wstawiasz gdzie chcesz przecinek .


    Każdy algorytm można utworzyć na wiele sposobów. Można więc zadać pytanie:
    Czy w tym wypadku szybkość operowania na zmiennych jest aż tak istotna, by tworzyć aż sześć zmiennych?

    Przecież to tylko automat wrzutowy, a nie piekielnie szybka liczarka monet :)

  • #46 08 Lis 2016 11:46
    2675900
    Użytkownik usunął konto  
  • #47 08 Lis 2016 13:17
    kamyczek
    Poziom 34  

    niveasoft napisał:
    ..a na marginesie zapytam od kiedy rodzina Attiny ma zaimplementowane mnożenie?


    A gdzie masz mnożenie ? .

    Tworząc jedna zmienna przy każdym wyświetleniu jej na LCD robisz konwersję której nawet nie widzisz ale ją robisz . Czym się róźni 6 zmiennych w ram od ramu który nie jest używany
    dla nas niczym chyba że go nie ma fizycznie ale zawsze można to zrobić na 6 rejestrach ogólnego przeznaczenia . Ale to jak mówicie kwestia podejścia do algorytmu . W moim przykładzie konwersja dokonuje się w trakcie działania licznika monet i tylko raz może to nie jest ogromna różnica ale wystarczy napisać program na dwa sposoby i ustawić pułapkę tak żeby zatrzymał się po policzeniu jakiejś dużej kwoty np. 999pln po czym zobaczyć jak wygląda licznik cykli lub czas wykonania zadania .

  • #48 08 Lis 2016 13:45
    373522
    Użytkownik usunął konto  
  • #49 08 Lis 2016 14:12
    dondu
    Moderator Mikrokontrolery Projektowanie

    kamyczek napisał:
    ... po czym zobaczyć jak wygląda licznik cykli lub czas wykonania zadania .

    Nie polemizujemy z czasem wykonywania operacji, tylko z faktem użycia tego argumentu w tym konkretnym projekcie, w którym (patrząc na posty autora) mikrokontroler będzie się nudził przez 99,99% czasu.

  • #50 08 Lis 2016 14:48
    kamyczek
    Poziom 34  

    dondu napisał:
    Nie polemizujemy z czasem wykonywania operacji, tylko z faktem użycia tego argumentu w tym konkretnym projekcie, w którym (patrząc na posty autora) mikrokontroler będzie się nudził przez 99,99% czasu.


    Jasne i 99% ramu będzie puste tak jak rejestrów więc w czym problem żeby sobie coś ułatwić ?

    niveasoft napisał:
    tego tyczyła się dygresja "na marginesie" Ahahaha


    mnożenie sprzętowe 2clk , ale i tak można się tu obyć bez tego działania . Po prostu operacje na zmiennych wielobajtowych zajmują więcej czasu ja staram się optymalizować pod swoje potrzeby to co można tak aby nie operować na wielobajtowych liczbach szesnastkowych .W wielu przypadkach faktycznie lepiej jest działać sobie na wielobajtowych w sposób który proponujecie ale nie tam gdzie po każdym wrzuceniu monety będziemy konwertowali taką liczbę na system dziesiętny . Ja tu nie będę pisał że bascom jest do niczego , ale co ja powinienem zrobić w odpowiedzi na śmiech kolegi Niveasoft skoro większość instrukcji bascoma nie tylko nie zajmuje słowa i nie wykonuje się nawet w 2 cyklach . Czasem warto zobaczyć jak wygląda kompilacja i jej wielkość z i bez instrukcji oraz zajętość ram .

  • #51 08 Lis 2016 14:51
    2675900
    Użytkownik usunął konto  
  • #52 08 Lis 2016 15:48
    373522
    Użytkownik usunął konto  
  • #53 08 Lis 2016 20:22
    dondu
    Moderator Mikrokontrolery Projektowanie

    kamyczek napisał:
    dondu napisał:
    Nie polemizujemy z czasem wykonywania operacji, tylko z faktem użycia tego argumentu w tym konkretnym projekcie, w którym (patrząc na posty autora) mikrokontroler będzie się nudził przez 99,99% czasu.


    Jasne i 99% ramu będzie puste tak jak rejestrów więc w czym problem żeby sobie coś ułatwić ?

    Czytaj proszę dokładnie co piszę i nie odpowiadaj bez tego analizy.

    Po raz drugi napiszę więc, że nie podważam Twojej propozycji jedynie Twoją argumentację, dot. szybkości wykonywania kodu, która w tym wypadku nie ma najmniejszego znaczenia.

  • #54 08 Lis 2016 20:31
    kamyczek
    Poziom 34  

    Może więc napiszę inaczej czy posiadanie wolnych zasobów mikrokontrolera w postaci ramu rejestrów czy pamięci programu usprawiedliwia bylejakość w tworzeniu kodu ? Patrząc na army w czajnikach chyba tak . Mnie takie rzeczy rażą i może to źle że nie decyduję się na pisanie takiego kodu . Staranności i dokładności uczymy się na co dzień i jak nie potrafimy zrobić czegoś dobrze w prostym programie nie zrobimy tego w żadnym kodzie ...

  • #55 08 Lis 2016 20:48
    dondu
    Moderator Mikrokontrolery Projektowanie

    kamyczek napisał:
    Może więc napiszę inaczej czy posiadanie wolnych zasobów mikrokontrolera w postaci ramu rejestrów czy pamięci programu usprawiedliwia bylejakość w tworzeniu kodu ? Patrząc na army w czajnikach chyba tak . Mnie takie rzeczy rażą i może to źle że nie decyduję się na pisanie takiego kodu . Staranności i dokładności uczymy się na co dzień i jak nie potrafimy zrobić czegoś dobrze w prostym programie nie zrobimy tego w żadnym kodzie ...

    To jest bylejakość, ale tylko w Twojej ocenie. Poświęcanie czasu na optymalizowanie kodu pod kątem szybkości jego wykonywania (bo tylko do tej części Twojej wypowiedzi się odniosłem), w sytuacji gdy mikrokontroler 99,99% czasu spędza w pętli nic nie robiąc, jest moim zdaniem stratą czasu. Ty możesz mieć oczywiście inne zdanie.

    Dlatego zasugerowałem jedynie pytanie do przemyślenia:

    dondu napisał:
    Każdy algorytm można utworzyć na wiele sposobów. Można więc zadać pytanie:
    Czy w tym wypadku szybkość operowania na zmiennych jest aż tak istotna, by tworzyć aż sześć zmiennych?

    Przecież to tylko automat wrzutowy, a nie piekielnie szybka liczarka monet :)

  • #56 08 Lis 2016 21:39
    kamyczek
    Poziom 34  

    Autor sam rozsadzi co mu się będzie chciało zrobić i jak . Poza tym dondu różnimy się podejściem do wielu tematów ja przedstawiłem swój punkt widzenia ty masz inny dla mnie liczą się właśnie szczegóły i zwracam uwagę na rzeczy do których inni nie przywiązują wagi . Staram się być konsekwentny w tym co robię i tak samo staram się wydyszać maksimum w prostym jak i złożonym kodzie , czy jest to potrzebne czy nie . Czasem dla wyjaśnienia postepowania nie potrzeba stwierdzenia że układ będzie pobierał 10% prądu mniej choć tu też poziom poboru prądu będzie różny . Niektóre rzeczy robimy dla własnej satysfakcji to jest może właśnie jedna z tych rzeczy dla których nie muszę udowadniać że zmieni to coś w rzeczywistości . Pozostawiam decyzję autorowi i kończę dyskusję w tym temacie więc proszę nie cytujcie moich wypowiedzi bo temat uważam za wyczerpany z mojej strony .

  • #58 13 Lis 2016 17:48
    Orion045
    Poziom 11  

    Padł mi scalak więc niemam jak wypróbować czy teraz wszystko dobrze. Bo poprzednio dobrze mi liczyło do 650 ZŁ. Potem zamiast 655 zł wyświetlało 654 zł 64 Gr. mimo że dodałem 5 zł do 650.Przy If Zlote > 10 Then Decr Pos przesuwało o 1 wprawo a potem przy 11 w lewo. Wpisałem If Zlote = 10 Then Decr Pos, czy lepiej wpisać If Zlote > 9 Then Decr Pos?CZy można też zamiast gosub użyć goto?

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

  • #59 13 Lis 2016 17:59
    373522
    Użytkownik usunął konto  
  • #60 14 Lis 2016 16:33
    Orion045
    Poziom 11  

    Program poprawiłem i działa na symulatorze dobrze. Teraz tylko zaprojektować płytkę. Mam też pytanie czy musi być zewnęczny rezonator kwarcowy 8Mhz jak w programie mam ustawione na mikrokontroler

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod
    Schemat.