Programmierinformationen zum ATtiny2313 und ATtiny2313A

Auslesen des ATtiny2313 mit dem mySmartUSB:
avrdude -p t2313 -F -c avr910 -P /dev/ttyUSB0 -v
avrdude -p t2313 -F -c avr910 -P /dev/ttyUSB0 -U flash:r:flash.hex:i
Statt flash sollte auch noch gehen: eeprom, lock, hfuse, lfuse und signature.

Lock-Bits: auf default (0xFF) lassen.

Fuse-Bits: (Zusammenfassung vom Datenblatt)

xfuse          -     -     -     -      -     -      -    SELFPRG 
  default:     1     1     1     1      1     1      1       1       = 0xFF
hfuse        DWEN EESAVE SPIEN WDTON BODLEV2 BODLEV1 BODLEV0 RSTDISBL
  default:     1     1     0     1      1     1      1       1       = 0xDF
lfuse        CKDIV8 CKOUT SUT1 SUT0  CKSEL3  CKSEL2  CKSEL1  CKSEL0
  default:     0     1     1     0      0     1      0       0       = 0x64
Bedeutung der Fuses:
Setzen der Fuses: avrdude -p t2313 -c avr910 -P /dev/ttyUSB0 -U lfuse:w:0xE4:m
Beispielwerte: 0xE4 fuer 8MHz intern, 0xED fuer langsamen Quarz, 0xEF fuer Quarz ab 8MHz
Weitere Informationen zu den AVR_Fuses auf mikrocontroller.net

Speicherbelegung:
Der ATtiny2313 hat 2KB Flash, 128Byte EEPROM und 128Byte SRAM.
Beim Ausschalten bleiben die Daten im Flash und EEPROM erhalten, Daten im RAM gehen verloren.
Programmbereich: Word-weise organisiert (16-Bit Worte)
0000: Application-Flash
03FF: letztes Word im Flash

RAM-Bereich: Byte-weise organisiert
0000: r0
0001: r1
...
001F: r31
0020: IO-Bereich
005F: letztes Byte im IO-Bereich
0060: SRAM
00DF: letztes Byte

EEPROM-Bereich: Byte-weise organisiert
0000:
007F:


Unterschiede zwischen ATtiny2313 und ATtiny2313A

Der 2313A hat zusätzlich noch PCINT8 bis PCINT16.
Beim 2313A gibt es noch 2 zusätzliche Interruptvektoren: PCINT1 und PCINT2. Der PCINT vom 2313 heisst beim 2313A PCINT0.
Im 2313A gibt es ein Power Reduction Register PRR.

Timer des ATtiny2313 oder ATtiny2313A

Die wichtigsten Informationen zu den Timern sind im Datenblatt auf den Seiten 81 und 110 zu finden.

Timer 0 (8-Bit)

Zusammenfassung der Tabelle 11-8:
Mode WGM2:1:0 Modus   TOP   Update  TOV-Flag bei
 0      0 0 0 normal  0xFF  sofort  0xFF
 1      0 0 1 PWM     0xFF  0xFF    0x00
 2      0 1 0 CTC     OCR0A sofort  0xFF (also nie wenn OCRA!=0xFF !!)
 3      0 1 1 FastPWM 0xFF  0xFF    0xFF
 5      1 0 1 FastPWM OCR0A TOP     0x00
 7      1 1 1 FastPWM OCR0A TOP     TOP

Relevante Register:
TIMSK Timer-Interrupt-MaSK (letzte 3 Bits fuer Timer0)
Bit  7     6      5     4   3     2      1    0
    TOIE1 OCIE1A OCIE1B - ICIE1 OCIE0B TOIE0 OCIE0A

TCCR0A
Bit  7      6      5      4     3  2  1     0
    COM0A1 COM0A0 COM0B1 COM0B0 -  - WGM01 WGM00 
TCCR0B
Bit  7     6    5  4  3     2    1    0
    FOC0A FOC0B -  - WGM02 CS02 CS01 CS00
Bedeutung der Bits in TCCR0A/TCCR0B:
  WGM02-0:  Modus (Waveform Generation Mode), siehe obige Tabelle.
  COM0A1-0/COM0B1-0: Modus fuer PWM-Pins, bei Benutzung PB2 und PD5 im DDRB/DDRD setzen
    00  PWM-Pins OC0A (PB2) und OC0B (PD5) nicht verwendet
    01  OC0A wechseln wenn OCR0A erreicht wird (nur in FastPWM-Modi?, nur fuer OC0A erlaubt?)
    10  OC0A/OC0B setzen wenn TCNT0 bei 0 startet, loeschen wenn OCR0A/OCR0B erreicht,
        in Modus 1 zusaetzlich noch setzen beim runterzaehlen.
    11  OC0A/OC0B loeschen wenn TCNT0 bei 0 startet, setzen wenn OCR0A/OCR0B erreicht,
        in Modus 1 zusaetzlich noch loeschen beim runterzaehlen.

TCNT0  Timer CouNTer 0
 Zaehlerwert lesbar und schreibbar
OCR0A  Output Compare Register timer0 A
 Vergleichsregister A, wird dauernd mit TCNT0 verglichen
OCR0B  Output Compare Register timer0 B
 Vergleichsregister B, wird dauernd mit TCNT0 verglichen

Timer 1 (16-Bit)

Relevante Register: (ab S.104 im Datenblatt zum 2313 oder S.110 beim 2313A)
TIMSK Timer-Interrupt-MaSK (letzte 3 Bits fuer Timer0)
Bit  7     6      5     4   3     2      1    0
    TOIE1 OCIE1A OCIE1B - ICIE1 OCIE0B TOIE0 OCIE0A
 TOIE1: Timer Overflow Interrupt Enable, Interrupt bei Ueberlauf eingeschaltet
 OCIE1A/OCIE1B: Output Compare Interrupt Enable
 ICIE1: Input Capture Interrupt Enable

TCCR1A  Timer Counter Control Register
Bit  7      6      5      4     3  2  1     0
    COM1A1 COM1A0 COM1B1 COM1B0 -  - WGM11 WGM10 
TCCR1B
Bit  7     6     5   4     3     2    1    0
    ICNC1 ICES1  -  WGM13 WGM12 CS12 CS11 CS10
TCCR1C
Bit  7     6     5  4  3  2  1  0
    FOC1A FOC1B  -  -  -  -  -  -

Bedeutung der Bits in TCCR1A-C:

  WGM13-0: Modus (Waveform Generation Mode)
  Auszug aus Tabelle 46:
    0  Normal   0xFFFF Immediate MAX
    4  CTC      OCR1A  Immediate MAX
   12  CTC      ICR1   Immediate MAX
   14  Fast PWM ICR1   TOP       TOP

  CS12-0:  Vorteiler
    0  Timer ausgeschaltet
    1  Teiler=1, es wird also F_CPU direkt verwendet
    2  Teiler=8
    3  Teiler=64
    4  Teiler=256
    5  Teiler=1024
    6  Externer Takt an T1, fallende Flanke
    7  Externer Takt an T1, steigende Flanke

  COM1A1-0/COM1B1-0: Modus fuer PWM-Pins, bei Benutzung PB3 und PB4 im DDRB setzen
    00  PWM-Pins OC1A (PB3) und OC1B (PB4) nicht verwendet
    01  in PWM-Modus: nur wenn WGM13=1: OC1A wechseln wenn OCR1A==TCNT1, OC1B nicht verwendet
        in andern Modi: OC1A/OC1B wechseln wenn OCR1A/OCR1B erreicht 
    10  loeschen von OC1A/OC1B beim raufzaehlen wenn OCR1X erreicht, setzen beim runterzaehlen
    11  setzen von OC1A/OC1B beim raufzaehlen wenn OCR1X erreicht, loeschen beim runterzaehlen

  ICNC1: Input Capture Noise Canceler, Rauschunterdrückung fuer den ICP1-Pin
  ICES1: Input Capture Edge Select, Flanke vom ICP1-Pin: 0=fallende, 1=steigende Flanke.
         Wenn ICIE1 in TIMSK gesetzt ist wird dann TCNT1 nach ICR1 kopiert.

  FOC1A: In nicht-PWM-Modi setzen/loeschen von OC1A (setzen wenn COM1A1/COM1A0 11, loeschen wenn 10)
  FOC1B: In nicht-PWM-Modi setzen/loeschen von OC1B (setzen wenn COM1B1/COM1B0 11, loeschen wenn 10)

TCNT1H  Timer CouNTer 1 (Bits 15 bis 8)
TCNT1L  Timer CouNTer 1 (Bits  7 bis 0)

OCR1AH  Output Compare Register timer1 A
OCR1AL  Output Compare Register timer1 A

OCR1BH  Output Compare Register timer1 B
OCR1BL  Output Compare Register timer1 B

ICR1H   Input Capture Register timer1  Wenn ICP1-Pin aktiviert, wird TCNT1 hierher kopiert (siehe ICES1)
ICR1L   Input Capture Register timer1  Im Datenblatt wird ICP1 manchmal auch als ICPI bezeichnet
  (Statt ICP1 kann auch der Analog-Comperator verwendet werden, wenn dort das entsprechende Bit gesetzt)

TIFR    Timer Interrupt Flag Register
Bit  7    6     5    4  3    2     1    0
    TOV1 OCF1A OCF1B - ICF1 0CF0B TOV0 OCF0A
Bei Verwendung von Interruptsubroutinen (ISR) werden diese
Flags automatisch gesetzt und geloescht. Somit ist das
Register TIFR zum Programmieren nicht wirklich relevant.

Letzte Änderung: 11.Aug.2012 / Rolf                                                                                 Validator