Har jag hittat en tryckfelsnisse (bildfel) ?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
1802
Inlägg: 6828
Blev medlem: 6 februari 2009, 13:52:28

Har jag hittat en tryckfelsnisse (bildfel) ?

Inlägg av 1802 »

På första bilden Bild i http://www.nongnu.org/avr-libc/user-man ... oject.html är en LED kopplad till (OSCI) PB3. Men nedan i programmet PB2?

Kod: Markera allt

   /* Enable OC1 as output. */
    DDROC = _BV (OC1);
  cc:	82 e0       	ldi	r24, 0x02	; 2
  ce:	87 bb       	out	0x17, r24	; 23
Klippt från io2313.h

Kod: Markera allt

/*
 *  The Register Bit names are represented by their bit number (0-7).
 */     
 
/* General Interrupt MaSK register */
#define    INT1    7
#define    INT0    6
 
/* General Interrupt Flag Register */
#define    INTF1   7
#define    INTF0   6
 
/* Timer/Counter Interrupt MaSK register */                 
#define    TOIE1   7
#define    OCIE1A  6
#define    TICIE   3 /* old name */ 
#define    TICIE1  3
#define    TOIE0   1
 
/* Timer/Counter Interrupt Flag register */                   
#define    TOV1    7
#define    OCF1A   6
#define    ICF1    3
#define    TOV0    1
 
/* MCU general Control Register */ 
#define    SE      5
#define    SM      4
#define    ISC11   3
#define    ISC10   2
#define    ISC01   1
#define    ISC00   0
 
/* Timer/Counter 0 Control Register */
#define    CS02    2
#define    CS01    1
#define    CS00    0
 
/* Timer/Counter 1 Control Register */
#define    COM1A1  7
#define    COM1A0  6
#define    PWM11   1
#define    PWM10   0
 
/* Timer/Counter 1 Control and Status Register */
#define    ICNC1   7
#define    ICES1   6
#define    CTC1    3
#define    CS12    2
#define    CS11    1
#define    CS10    0
                        
/* Watchdog Timer Control Register */
#define    WDTOE   4
#define    WDE     3
#define    WDP2    2
#define    WDP1    1
#define    WDP0    0
 
/* EEPROM Control Register */
#define    EEMWE   2
#define    EEWE    1
#define    EERE    0
 
/* Data Register, Port B */  
#define    PB7     7
#define    PB6     6
#define    PB5     5
#define    PB4     4
#define    PB3     3
#define    PB2     2
#define    PB1     1
#define    PB0     0
 
/* Data Direction Register, Port B */
#define    DDB7    7
#define    DDB6    6
#define    DDB5    5
#define    DDB4    4
#define    DDB3    3
#define    DDB2    2
#define    DDB1    1
#define    DDB0    0
 
/* Input Pins, Port B */
#define    PINB7   7
#define    PINB6   6
#define    PINB5   5
#define    PINB4   4
#define    PINB3   3
#define    PINB2   2
#define    PINB1   1
#define    PINB0   0
 
/* Data Register, Port D */
#define    PD6     6
#define    PD5     5
#define    PD4     4
#define    PD3     3
#define    PD2     2
#define    PD1     1
#define    PD0     0
 
/* Data Direction Register, Port D */
#define    DDD6    6
#define    DDD5    5
#define    DDD4    4
#define    DDD3    3
#define    DDD2    2
#define    DDD1    1
#define    DDD0    0
 
Zmod
Inlägg: 37
Blev medlem: 25 juni 2007, 16:32:16
Ort: Kungsbacka

Re: Har jag hittat en tryckfelsnisse(bildfel)?

Inlägg av Zmod »

DDROC the name of the DDR (data direction register) for the OC output - från hemsidan

Jag tror det har något med pwm funktionen att göra antagligen ställer den här raden in vilken typ av PWM funktion han vill ha (non-inverted.. finns massa olika inställningar man kan göra) för att veta exakt får du kolla databladet.

Blev lite förundrad när jag läste detta först. Men jag blandade ihop det med DDR registrerna för pinnarna. Men jag tror inte det är något fel på den här koden. Iaf inte den här biten.
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Har jag hittat en tryckfelsnisse(bildfel)?

Inlägg av snigelen »

Det är ett tryckfel i bilden, det skall stå OC1, inte OCI. Bildexemplet visar den numera antika AT90S2313, där output compare för timer1 (PWM) är på PB3.

I iocompat.h är OC1 definierat till PB3 (som är lika med 3) för AT90S2313, vilket stämmer med bilden, och till PB1 för atmega8 som de kompilerat exemplet för. _BV(OC1) är då samma som _BV(PB1) som är samma som (1<<PB1) som är samma som (1<<1) som lika med 2, vilket stämmer med disassembler-listningen.
1802
Inlägg: 6828
Blev medlem: 6 februari 2009, 13:52:28

Re: Har jag hittat en tryckfelsnisse(bildfel)?

Inlägg av 1802 »

Konstigt att den heter "#define OCIE1A 6" i io2313.h .
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Har jag hittat en tryckfelsnisse(bildfel)?

Inlägg av snigelen »

Det är en bit för att aktivera ett interrupt, Output Compare Interrupt Enable 1A. Den har inget att göra med vilken pinne utgången sitter på.
1802
Inlägg: 6828
Blev medlem: 6 februari 2009, 13:52:28

Re: Har jag hittat en tryckfelsnisse(bildfel)?

Inlägg av 1802 »

"OC(IE)1A 6" aha då blir det OC1. Och bilden hör inte till programmet. Man lär sig.... Snubblade på detta när jag ville läsa minnet med avrc. Gillar länken ovan, då den tar steget från .c till .hex via asm :-) . Att översätta .c till .asm gör det lättare för mig att förstå vad som händer. avr / pgmspace .h PROGMEM pgm_read_byte skall jag fuska lite med. Skall visst spara RAM vid anv av strängvariabler. Mitt MemBitBlink i C....
Skriv svar