Piszę program na #atmega8 AVRdude zapisuje mi ~5100 bajtów danych i wszystko działa. Gdy program rozrośnie się do ~5300 bajtów zaczynają się jaja - freezy w funkcjach które wcześniej działały, nie wyświetlające się logi na UART. Podejrzewam, że brakuje mi już pamięci, ale spodziewałem się tego przy ~8000b. Czy dobrze rozumiem, że ~5100b zajmuje kod programu, a reszta to stos programu na który zaczynam się wpieprzać z kodem?
#programowanie
@mirkogreg: AVRy to architektura harwardzka - program jest gdzie indziej (w pamięci flash), a dane (statyczne, stos i sterta) gdzie indziej (w RAMie). Jeżeli udało się zapisać program do flasha, to znaczy że się mieści. Podczas działania programu zawartość flasha się nie zmienia (no, chyba że się naprawdę postarasz, ale to mało prawdopodobne sądząc po pytaniu).

Natomiast możliwe, że brakuje ci RAMu, w takim sensie, że stos i sterta nie
  • Odpowiedz
Ostatnio zacząłem się uczyć programować #avr #atmega
Chcę stworzyć urządzenie które będzie korzystało z do 30 atmega wszystko połączone za pomocą #i2c / #twi gdzie masterem będzie #raspberrypi

Udało mi się już porozumieć z jednym #atmega8 z poziomu #raspberrypi teraz chcę podobną operację wykonać dla wielu atmega. Jednak nie umiem znaleźć informacji na temat jak atmega ma sobie
@pytonger: Jak zrealizowałeś to że urządzenie "łapało" nadany adres? Wydawało mi się że slave aby skorzystać z komunikacji po I2C musi sobie nadać adres na starcie. Da się jakoś puścić globalny broadcast "oto adres, kto pierwszy ten lepszy"?
  • Odpowiedz
@Niewpisze: W moim przypadku nie dotyczyło to i2c, ale nie ma przecież żadnych przeciwwskazań żeby wszystkie urządzenia działające na szynie i2c nadały sobie na początku jeden numer a potem go zmieniły na wskazany przez mastera.
  • Odpowiedz
Mirki, ja znowu z pytaniem o #avr piszę, konkretnie mam problemy z odczytem z wielu portów ADC.

Korzystam z trybu pojedynczego odczytu z ADC, przed główną pętlą wywołuję configreADC() a później wielokrotnie w pętli w razie potrzeby, dwukrotnie metodę getAnalogInput z argumentami LIGHTLEVELADC = 1 (ADC1) oraz DARKLIGHTLEVEL_ADC =
Visher - Mirki, ja znowu z pytaniem o #avr piszę, konkretnie mam problemy z odczytem ...

źródło: comment_viKN1pTGgYd5dgxp8BR273jQXyt5Tdrw.jpg

Pobierz
@m8se: pojemności mu się za wolno przeładowywały. Z tego powodu przestawienie przeskalera (wolniejszy pomiar) pomogło. ADC ma w sobie mały kondensator, który potrzebuje chwilę żeby się przeładować. Jak źródło napięcia ma sporą rezystancję, to może to potrwać dość długo.
  • Odpowiedz
@Visher:

By default, the successive approximation circuitry requires an input clock frequency between 50kHz and 200kHz to get maximum resolution. If a lower resolution than 10 bits is needed, the input clock frequency to the ADC can be higher than 200kHz to get a higher sample rate. The ADC module contains a prescaler, which generates an acceptable ADC clock frequency from any CPU frequency above 100kHz.


Czyli jak masz zegar
  • Odpowiedz
To znowu ja. Uczę się swojej ATmegi8 i postanowiłem okiełznać Timera0 na dwa sposoby: raz z sukcesem za pomocą globalnych przerwań - udało się uzyskać przerwanie co ~1s (F_CPU=8000000 / 256 / 1024 / 30), natomiast z drugim, "ręcznym" sposobem mam problem: atmega tak jakby pomija preskalera całkowicie. Poniższy kod daje przerwanie co ~0.5s bez względu na to jaki preskaler ustawię. Czemu on nie działa? Nie satysfakcjonuje mnie takie rozwiązanie, żebym musiał
@Visher: Jesteś pewien, że dobrze zdejmujesz flagę?

Alternatively, TOV0 is cleared by writing a logic one to the flag.


a u ciebie stoi

#define TIMER0_RESET TIFR &= ~(1 << TOV0)
  • Odpowiedz
Mireczki, wygrzebałem swoje stare podzespoły i chcę napisać prosty program na Atmegę 8. Pobrałem najnowszy Atmel Studio (chcę spróbować coś innego niż eclipse), tworząc nowy projekt wybrałem ten typ procesora.

Problem jest z biblioteką avr/io.h - nie widzi jej. Widzi np. util/delay.h, a foldery util i avr są w tym samym folderze..

Podejrzewam że może chodzić o niezdefiniowaną wersję atmegi, cały plik io.h to switch po definicjach, jednak nie mam pojęcia jak to określić, jeżeli to jest to.

Dodatkowo,
Zna się ktoś z was na Assembler do ATMega8?

Mam sobie sboxinput. 10 byte. W RAMie sobie leży.

I mam sbox 256 Byte (taką jaka jest używana np. w DES).

Celem
  • Odpowiedz