-
Op pagina 84: staat in het derde grijze blok:
for ( sum-0,i=0; i<n; sum+=i,i++) ;
dit moet zijn:
for ( sum=0,i=0; i<n; sum+=i,i++) ;
-
In figuur 15.1 op pagina 200 zijn in het schema
twee pinnummers niet correct.
De pinnummers 40 (RESET/PDI) en 42 (PDI) moeten
respectievelijk 35 en 34 zijn.
Dit geldt voor alle schema's met de Xmega, dus ook voor de figuren:
15.11, 17.3, 17.17, 18.15, 18.19, 19.17, 20.8, 21.5, 22.11, 22.15, 23.7, 23.14 en H.1.
-
In code 17.8 op bladzijde 262 wordt poort D gebruikt en in de bijbehorende tekst en in figuur 17.15
wordt poort B.
In code 17.8 moet regel 27 aangepast worden:
PORTB.DIRSET = 0x0F;
en het statement op regel 40 en 41 moet als volgt aangepast worden:
PORTB.OUT = (PORTB.OUT & 0xF0) |
( (~_BV(i) & 0x0F);
Overigens is bij poort B de bitmaskering overbodig. Poort B heeft bij de Xmega128a4u slechts
vier ingangen. Dus dit kan ook worden vervangen door:
PORTB.OUT = (~_BV(i) & 0x0F;
of door:
PORTB.OUT = ~_BV(i);
-
Op bladzijde 307 moet de laatste toewijzing aan ADCA.CTRLB in de inzet midden op de pagina
vervangen worden door:
...
ADCA.CTRLB = ADC_RESOLUTION_12BIT_gc; // 12 bits conversion
ADCA.CTRLB |= !ADC_CONMODE_bm; // unsigned
ADCA.CTRLB |= !ADC_FREERUN_bm; // no free run
-
Op bladzijde 298 staat dat ΔV gelijk is aan 0.05 VCC,
dat moet zijn gelijk aan 0.05 Vref.
Op bladzijde 308 is ΔV wel correct weergegeven.
-
In code 19.7 moet voor regel 26 aan de functie
init_adc
deze toekenning toegevoegd worden:
ADCA.CTRLA = ADC_ENABLE_bm;
-
In code 23.7 moet regel 5 van functie
init_ac
worden gewijzigd in:
PORTA.DIRCLR = PIN2_bm | PIN1_bm; // PA2 and PA1 are inputs
In code 23.8 moet regel 6 van functie init_ac
worden gewijzigd in:
PORTA.DIRCLR = PIN2_bm; // PA2 is input
In code 23.10 moet regel 3 van functie init_ac
worden gewijzigd in:
PORTA.DIRCLR = PIN2_bm;
-
In tabel 16.3 zijn de adressen bij nummer 91, 92 en 93 niet correct.
Deze adresse zijn:
91 0x016C USARTD1_RXC_vect UART D1 reception complete interrupt
92 0x0170 USARTD1_DRE_vect UART D1 data register empty interrupt
93 0x0174 USARTD1_TXC_vect UART D1 transmission complete interrupt
-
In figuur 16.4 moet adres
000090
worden gewijzid in 00008a
.
-
In figuur 16.4 is de syntax van de assembly op een paar plaatsen verkeerd:
+.64
moet .+64
zijn
+.100
moet .+100
zijn
-.538
moet .-538
zijn
-
Bij de notitie in de marge van pagina 224 moet staan:
"In code 16.1 is pin 3 van poort B ..."
-
In paragraaf 17.6 op pagina 259 staat: "Het RAM-geheugen van de Xmega is ongeveer 32 kB groot.".
Dit is niet correct. Dit moet zijn: "Het RAM-geheugen van de Xmega is ongeveer 8 kB groot.".
-
Bij code 23.20 is regel 3 overbodig.
-
Bij code 23.21 is regel 3 overbodig.
-
Bij code 23.22 is regel 3 overbodig.
-
Bij code 23.23 is regel 4 overbodig.
-
Bij code 23.24 is regel 3 overbodig.
-
Bij code 23.26 is regel 4 overbodig.
-
In code 22.14 moet regel 19 worden gewijzigd in:
if ( TCC0.CCA <= (1000 - STEP) ) TCC0.CCABUF = TCC0.CCA + STEP;
-
In code 22.14 moet regel 23 worden gewijzigd in:
if ( TCC0.CCA <= (500 - STEP) ) TCC0.CCABUF = TCC0.CCA - STEP;
-
In code 22.18 moet regel 6 worden gewijzigd in:
TCC1.INTCTRLA = TC_OVFINTLVL_LO_gc; // enables overflow interrupt
-
In code 22.18 moet regel 12 worden gewijzigd in:
TCC1.INTCTRLA = TC_OVFINTLVL_OFF_gc; // disables overflow interrupt
-
De functie i2c_read uit code 21.8 werkt wel bij 2 MHz correct, maar niet bij 32 MHz.
Dit i2c_read werkt wel correct:
uint8_t i2c_read(TWI_t *twi, uint8_t ack)
{
uint8_t data;
while( ! (twi->MASTER.STATUS & TWI_MASTER_RIF_bm) ); // wait until received
data = twi->MASTER.DATA; // read data
twi->MASTER.CTRLC = ((ack==I2C_ACK) ? TWI_MASTER_CMD_RECVTRANS_gc : // send ack (go on) or
TWI_MASTER_ACKACT_bm|TWI_MASTER_CMD_STOP_gc); // nack (and stop)
if (ack==I2C_NACK) {
while( ! (twi->MASTER.STATUS & TWI_MASTER_BUSSTATE_IDLE_gc) );
}
return data;
}
-
Op pagina 432 staat in de voorlaatste alinea:
Op adres 256 staat de waarde 0.
dit moet zijn:
Op adres 255 staat de waarde 0.
-
Op pagina 259 staat bovenaan:
Het RAM-geheugen van de Xmega is ongeveer 32 kB groot.
dit moet zijn:
Het RAM-geheugen van de Xmega is ongeveer 8 KB groot.
-
De titel van code 23.22:
De functie AutoCalibration32M
, die de interne 2 MHz oscillator verbetert.
moet zijn:
De functie AutoCalibration2M
, die de interne 2 MHz oscillator verbetert.
-
Op pagina 384 staat in het grijze blok:
ISR(TIMER0_OVF_vect)
moet zijn:
ISR(TCC0_OVF_vect)
-
Op pagina 384 staat in het grijze blok:
In de oneindige lus wordt getest of een van de ingangen 0 en 1 van poort~A laag is.
moet zijn:
In de oneindige lus wordt getest of een van de ingangen 0 en 1 van poort~B laag is.
-
Zowel regel 10 in code 17.3 als regel 11 in code 17.4:
bar = (bar << 1) & 0x0001;
moet zijn:
bar = (bar << 1) | 0x0001;
-
Op pagina 210 staat in de laatste regel van de eerste alinea:
Op regel 10 worden bit 2 en 3 weer laag gemaakt.
moet zijn:
Op regel 12 worden bit 2 en 3 weer laag gemaakt.
-
Regel 29 in code 15.10:
PORTE.DIRCLR = PIN2_bm; // output pin led
moet zijn:
PORTE.DIRSET = PIN2_bm; // output pin led
-
Regel 22 in code 22.16:
uint8_t c;
moet zijn:
uint16_t c;
-
Regel 5 in code 23.24:
while(!(OSC.STATUS & OSC_RC32K_bm)); // Wait for oscillator is ready
moet zijn:
while(!(OSC.STATUS & OSC_RC32KRDY_bm)); // Wait for oscillator is ready
-
In tabel 21.2 is de vierde regel:
SCK 1(XCK) 5(XCK) 7 7
dit moet zijn:
SCK 1(XCK) 5(XCK) 7 5
-
Op pagina 355 staat in de tweede alinea:
... via signaal SD0 een databit naar binnen en via SDO een databit naar buiten.
moet zijn:
... via signaal SDI een databit naar binnen en via SD0 een databit naar buiten.
-
De titel van code 22.3 is:
Een PWM-signaal met een duty-cycle van 20% met de single-slope-modus.
dit moet zijn:
Een PWM-signaal met een duty-cycle van 80% met de single-slope-modus.