Did you measure Vcc? If you are using USB power it can be 4.75V to 5.25V.
The ATmega running at Vcc=5V will treat anything over 3.0V (5V*0.6) as a logic HIGH so there is plenty of margin.
The ATmega328P is a low-power CMOS (Complementary Symmetry Metal Oxide Semiconductor) chip. It can run on a wide range of voltages. When it runs at 5V it is compatible with TTL logic levels.
From the datasheet (Electrical Characteristics), for a supply voltage of 5 volts, a LOW is from -0.5 to 1.5 volts, and a HIGH is from 3 volts to 5.5volts.
Specifically, a LOW is -0.5 to 0.3Vcc, and a HIGH is 0.6Vcc to Vcc+0.5, for values of Vcc between 2.4 and 5.5 volts.
Oops, sorry, input voltages.
Outputs are a maximum LOW of 0.9V, and a minimum HIGH of 4.2volts at 20mA.
Every transistor has some voltage drop across its Collector/Emitter (Vce) for an NPN/PNP transistors, and across its Drain/Source (Vds) for a MOSFET transistor.
ATMega uses MOSFET type transistors.
When the output is high, there is some small voltage drop across the transistor that connects the output pin to Vcc. This drop increases as current flow increases, so the output is always a little below Vcc.
When the output is low, there is some small voltage drop across the transistor that connects the output pin to Gnd. This drop increases as current flow increases, so the output is always a little above Gnd.
The output transistors on Arduino pins have about 40 ohms resistance if I remember right - however they have an absolute max rating of 40mA current too, so any safe use of the output pin will produce 1.6V or less for LOW and 3.4V or more for HIGH. Without a load on the pin you are measuring the +5V rail (unless your multimeter has a very low resistance).
TTL is an entirely separate (and obsolete) bipolar logic family - basically TTL and Arduino will inter-work, but you can't strictly speaking guarantee that a TTL output can drive an Arduino input high since TTL outputs are only guaranteed to generate 2.5V when high (most will in fact give a lot higher, and the problem is easily cured with a pull-up resistor).
Any logic family is characterised by 4 voltages, VIL, VIH, VOL, VOH (being the guaranteed input voltages and guaranteed output voltages assuming fully loaded according to the family specifications. The key properly is that 0V < VOL < VIL < VIH < VOH < Vdd
BTW these voltages apply to fast changing signals not just DC voltages, TTL outputs rise to a lot higher than 2.5V in a millisecond, its how high they rise in the specified signal rise-time (~ 15ns) that matters for true compatibility.
[ BTW the use of Vcc and Vdd for logic positive rails is a bit random (for TTL the positive rail connects to the transistor collectors, hence Vcc. For early MOS logic families the positive rail connected to the drains (hence Vdd), but with CMOS both supply rails actually connect to MOS source's, but we still call the positive supply Vdd and the ground Vss sometimes. Where is the logic! ]
'The ATmega328 provides UART TTL (5V) serial communication, which is available on
digital pins 0 (RX) and 1 (TX). An ATmega8U2 on the board channels this serial communication over USB
and appears as a virtual com port to software on the computer.'
What does this actually mean. That board uses TTL to talk to the computer and then when it received a TTL signal it converts it to something else that the Arduinio is can understand?
Also what does Vcc mean?
AWOL: 'Outputs are a maximum LOW of 0.9V, and a minimum HIGH of 4.2volts at 20mA.' Does mean that the Voltage signalling levels change with current? - Since this is a report is there any documentation that states these facts?
First question - the ATMega chip talks to the Serial adapter using TTL levels; Low down towards 0V, High up towards whatever the supply voltage is (3.3V or 5V).
The Serial adapter then does its thing to talk to the PC via USB (whole 'nother processor there). Other Serial adapters can also be used: RS232, with signals swinging from +5 to -5 (up to +12 to -12 as well), RS485/RS422 (with the Rx and Tx signal each going over a pair of wires), etc.
Second question - Vcc is the supply voltage, 3.3V or 5V.
Third question - yes voltage can vary with current - creeping up away from 0, and down from 5V. ATMega datasheet clearly spells this out. Above 40mA, output pins are prone to damage and/or failure.
Para. 30.2.8 Pin Driver Strength has a graph showing the same.
'The ATmega328 provides UART TTL (5V) serial communication, which is available on digital pins 0 (RX) and 1 (TX).
In the beginning, before there was USB and I2C and SPI, the term 'serial communication' generally referred to RS-232 (recommended standard #232). Among other things such as timing, connector polarity, etc this standard said that logic level '1' was to be represented by a negative voltage and logic level '0' was to be represented by a positive voltage.
In the middle ages, after there was RTL and before there was CMOS, there was TTL where logic '1' was represented by +5 volts (nominally) and logic '0' was represented by zero volts.
When you see the term 'TTL (5V) serial communication' this generally means serial communications using the timing specified by RS-232 along with logic levels specified by TTL.
An ATmega8U2 on the board channels this serial communication over USB and appears as a virtual com port to software on the computer.
In the beginning most desktop computers had one or more serial (RS-232) ports but current computers are supplied almost exclusively with USB ports. Most current microprocessors, on the other hand, have UART chips that generate the aforementioned TTL serial signals. The ATmega8U2 on the other hand is a microprocessor that does have USB capability. In this case such a chip has been programmed to convert from USB serial signals to TTL serial signals and vice versa.